我有这样读取的数据框:
df = pd.read_csv(myfile, delimiter=";")
df = df.set_index('date')
print(df)
NET_0 NET_1 NET_2 NET_3 NET_4 NET_5 NET_6 NET_7 NET_8 NET_9 NET_10 NET_11 NET_12 NET_13 NET_14 NET_15 NET_16 NET_17 NET_18 NET_19 NET_20 NET_21 NET_22 NET_23 NET_24 NET_25
date
2009-08-02 0 0 0 1 1 1 0 1 1 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 1 1
2009-08-03 0 0 0 1 1 1 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 1 1
2009-08-04 0 0 0 1 1 1 0 1 1 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 1 1
2009-08-05 0 0 0 1 1 1 0 1 1 0 1 1 0 0 1 0 0 0 0 0 1 0 1 1 1 1
2009-08-06 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2009-08-07 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
我想要这样的结果:如果一行中的所有 net_* 列都等于 1 我想要 1
作为结果,如果一行中的所有列都等于 0 -1
否则0
。像这样的东西:
date enseamble
2009-08-02 0
2009-08-03 0
2009-08-04 0
2009-08-05 0
2009-08-06 -1
2009-08-07 1
有没有不用for的快速方法? 谢谢
最佳答案
尝试 np.select()
:
m1=df.eq(1).all(axis=1) #check if all column in each row is 1
m2=df.eq(0).all(axis=1) ##check if all column in each row is 0
然后使用 np.select()
传递条件列表和针对每个条件的选择列表(引用所提供链接中的文档)
df['enseamble']=np.select([m1,m2],[1,-1],0) #using np.select expaination in docs
#to drop the remaining columns f, find difference between enseamble and other columns like below and call under axis=1:
m=df.drop(df.columns.difference(['enseamble']),axis=1)
print(m)
enseamble
date 0
2009-08-02 00:00:00 0
2009-08-03 00:00:00 0
2009-08-04 00:00:00 0
2009-08-05 00:00:00 0
2009-08-06 00:00:00 -1
2009-08-07 00:00:00 1
关于python - 如果数据框中的所有列都相等,则 Pandas 设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55403075/