我有一个这样的数据框,
ID 00:00 01:00 02:00 ... 23:00 avg_value
22 4.7 5.3 6 ... 8 5.5
37 0 9.2 4.5 ... 11.2 9.2
4469 2 9.8 11 ... 2 6.4
我可以使用
np.where
一次将条件应用于多个列吗?我想将00:00到23:00的值更新为
0
和1
。如果一天中的值大于avg_value
,则将其更改为1
,否则将其更改为0
。我知道如何将此方法应用于单个列。
np.where(df['00:00']>df['avg_value'],1,0)
我可以将其更改为多列吗?
输出会像
ID 00:00 01:00 02:00 ... 23:00 avg_value
22 0 1 1 ... 1 5.5
37 0 0 0 ... 1 9.2
4469 0 1 1 ... 0 6.4
最佳答案
选择所有不带DataFrame.iloc
的列,按DataFrame.gt
比较,并强制转换为integer
,最后按avg_value
添加DataFrame.join
列:
df = df.iloc[:, :-1].gt(df['avg_value'], axis=0).astype(int).join(df['avg_value'])
print (df)
00:00 01:00 02:00 23:00 avg_value
ID
22 0 0 1 1 5.5
37 0 0 0 1 9.2
4469 0 1 1 0 6.4
或使用
DataFrame.pop
提取列:s = df.pop('avg_value')
df = df.gt(s, axis=0).astype(int).join(s)
print (df)
00:00 01:00 02:00 23:00 avg_value
ID
22 0 0 1 1 5.5
37 0 0 0 1 9.2
4469 0 1 1 0 6.4
因为如果分配给相同的列,则整数将转换为浮点数(这是错误):
df.iloc[:, :-1] = df.iloc[:, :-1].gt(df['avg_value'], axis=0).astype(int)
print (df)
00:00 01:00 02:00 23:00 avg_value
ID
22 0.0 0.0 1.0 1.0 5.5
37 0.0 0.0 0.0 1.0 9.2
4469 0.0 1.0 1.0 0.0 6.4
关于python - 根据python中的条件更新多个列值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60258422/