gpt4 book ai didi

python - 根据python中的条件更新多个列值

转载 作者:行者123 更新时间:2023-12-01 00:02:15 26 4
gpt4 key购买 nike

我有一个像这样的数据框,

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 之间的值更新为 01。如果一天中某个时间的值大于 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并转换为整数,最后按 DataFrame.join 添加 avg_value 列:

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

因为如果分配给相同的列整数将转换为 float (这是错误):

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com