我想将熊猫数据帧的以下过滤减少到一行
首先举个DF的例子:
dff = pd.DataFrame({'myfiltercol':[1,1,1,2,2],
'D':[True,False,True,False,True],
'E':[False,True,False,True,False]})
print(dff)
myfiltercol D E
0 1 True False
1 1 False True
2 1 True False
3 2 False True
4 2 True False
现在对于 myfiltercol = 1 的情况,我想在 D 和 E 的列值之间进行布尔运算 OR,看看是否所有值都为真。
我能够在两行中做到这一点:
dff2 = dff.loc[(dff['myfiltercol'] == 1),['D','E']]
result = all(dff2['D'] | dff2['E'])
出于某种原因,我需要一行。 有人知道怎么做?
谢谢。
您可以使用DataFrame.any
而不是逻辑或两列之间,因为您已经对它们进行了索引,并且DataFrame.all
减少到单个布尔值:
dff.loc[(dff['myfiltercol'] == 1),['D','E']].any(1).all()
# True
或者,如果这些是您拥有的所有列,您也可以执行以下操作:
dff.set_index('myfiltercol').loc[1].any(1).all()
# True
这能行吗?
>>> dff.loc[(dff['myfiltercol'] == 1),:].eval('D | E').all()
True