Использование DataFrame.mask
:
df = pd.DataFrame({
'id':[1,2,1,2,1,1],
'm':[4,5,4,5,5,4],
't':[7,8,9,4,2,3],
'w':[1,3,5,7,1,0],
'T':[5,3,6,9,2,4],
'f':[1,3,5,7,1,0],
})
multiple_days = ['m', 't', 'w', 'T', 'f']
m = df['id'] == 1
df[multiple_days] = df[multiple_days].mask(m, 1, axis=1)
print (df)
id m t w T f
0 1 1 1 1 1 1
1 2 5 8 3 3 3
2 1 1 1 1 1 1
3 2 5 4 7 9 7
4 1 1 1 1 1 1
5 1 1 1 1 1 1
Еще одна идея из комментариев из @Pankaj Joshi:
df.loc[m, multiple_days] = 1
Или решение для numyс numpy.where
и трансляцией:
arr = df[multiple_days].values
df[multiple_days] = np.where(m[:, None], 1, arr)
print (df)
id m t w T f
0 1 1 1 1 1 1
1 2 5 8 3 3 3
2 1 1 1 1 1 1
3 2 5 4 7 9 7
4 1 1 1 1 1 1
5 1 1 1 1 1 1