Цикл в датафрейме
import numpy as np
import pandas as pd
df = pd.DataFrame([[1, 2, 3, 4],
[3, 6, 9, 12]], columns=["A", "B", "C", "D"])
x = [5, 7, 8, 10]
for i in x:
for j in range(len(df.iloc[1, :])):
if df.iloc[1, j] > i:
df.iloc[0, j] = 555
print(df)
В этом примере кода, я хочу, если во второй строке df число больше x внутри одной итерации, то по такому же индексу в первой строке заменяем на 555, в итоге вывести 4 новых df.
но ответ получается такой, когда запускаю цикл, то для x=5 он делает, а потом для остальных выдает всетоже что и для x=5, тобишь повторяет
A B C D
0 1 555 555 555
1 3 6 9 12
A B C D
0 1 555 555 555
1 3 6 9 12
A B C D
0 1 555 555 555
1 3 6 9 12
A B C D
0 1 555 555 555
1 3 6 9 12
Ответы (2 шт):
Автор решения: Alexey Trukhanov
→ Ссылка
Когда Вы проходите по циклу в первый раз, Вы меняете исходный датафрейм. Вам надо работать с копией. В качестве бонуса могу рекомендовать не использовать второй цикл, а воспользоваться методами pandas.
for i in x:
df_temp = df.copy()
df_temp.iloc[0][df.iloc[1].gt(i)] = 555
print(df_temp)
Автор решения: Алексей Р
→ Ссылка
Однострочник
print(*(pd.concat([df.iloc[0].mask(df.iloc[1].gt(i), 555), df.iloc[1]], axis=1).T for i in x), sep='\n' * 2)