Использовать mask
- для всех столбцов:
df = df.mask(df < 0, -5)
Или, если необходимо, указать столбцы:
cols = ['T1','T2','T3','T4']
df[cols] = df[cols].mask(df[cols] < 0, -5)
print (df)
T1 T2 T3 T4
0 20 -5 4 3
1 85 -5 34 21
2 -5 22 31 75
3 -5 5 7 -5
С аналогичным подходом с выбором по позициям, как в вопросе:
pos = df.columns.get_loc("T1")
df.iloc[:,pos:pos+4] = df.iloc[:,pos:pos+4].mask(df < 0, -5)
EDIT:
Циклические решения в пандах не рекомендуются, если существует векторизованное решение , потому что медленное.
Но возможно, ваш код должен быть изменен с iterrows
и iteritems
:
for i, row in df.iloc[:,df.columns.get_loc("T1"):df.columns.get_loc("T1")+4].iterrows():
for j,k in row.iteritems():
if k < 0:
df.loc[i, j] = -5
print (df)
T1 T2 T3 T4
0 20 -5 4 3
1 85 -5 34 21
2 -5 22 31 75
3 -5 5 7 -5