2
我有一个数据帧,看起来像:使用及/ np.where()比较多个列的布尔值排在熊猫/ np.any()
a A a B a C a D a E a F p A p B p C p D p E p F
0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0
2 0 1 0 0 0 0 0 0 1 0 0 0
3 0 0 1 0 0 1 0 0 0 0 0 0
4 0 0 0 1 0 1 0 0 0 0 0 0
5 0 0 0 0 1 0 0 0 0 0 0 0
6 0 0 0 0 0 0 1 0 0 0 0 0
df = pd.DataFrame({'p A':[0,0,0,0,0,0,1],'p B':[0,0,0,0,0,0,0],'p C':[0,0,1,0,0,0,0],'p D':[0,0,0,0,0,0,0],'p E':[0,0,0,0,0,0,0],'p F':[0,0,0,0,0,0,0],'a A':[0,1,0,0,0,0,0],'a B':[0,0,1,0,0,0,0],'a C':[0,0,0,1,0,0,0],'a D':[0,0,0,0,1,0,0],'a E':[0,0,0,0,0,1,0],'a F': [0,0,0,1,1,0,0]})
注:这是一个大大简化版本我的实际数据。
a代表Actual; p代表预测; A - F代表一系列标签
我想编写一个查询,对于我的数据框中的每一行,在下列情况下返回True:(“p columns”= 0中的所有行值)和(至少一个行值在“一列” = 1)即,对于每一行,p列被固定在0和至少1列= 1
使用答案Pandas Dataframe Find Rows Where all Columns Equal和Compare two columns using pandas 我通过使用&
和np.any()
((df.iloc[:,6] == 0) & (df.iloc[:,7] == 0) & (df.iloc[:,8] == 0) & (df.iloc[:,9] == 0) & (df.iloc[:,10] == 0) & (df.iloc[:,11] == 0) & df.iloc[:,0:6].any(axis = 1))
>>
0 False
1 True
2 False
3 True
4 True
5 True
6 False
dtype: bool
有没有更简洁可读的方法我可以做到这一点?
哪一个是最 “Python化”/最大熊猫使用? – Chuck
这取决于你,但我更喜欢'过滤器'解决方案,因为更加动态 - 如果添加了一些列,解决方案stil完美工作。 – jezrael
好极了。谢谢! – Chuck