Цикл в датафрейме

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)
→ Ссылка