python - 如果数据框中的所有列都相等,则 Pandas 设置值

标签 python pandas

我有这样读取的数据框:

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/

相关文章:

python - 对 pandas 数据框列进行二值化

python - Pandas - 汇总行以填充缺失数据

Python:十六进制正则表达式问题

python - python的sphinx中var、cvar、ivar有什么区别?

python - 如何创建返回列表包含字符串的类型提示?

python - 如何读取名称困惑且不可读的文件?

python - 如何将应用函数链接到 pandas 数据框的子集

python - 数组中的 Perl 项

python - Keras:微调 Inception 时精度下降

python - 是否有允许在列中查找两个字符串的 python 函数?