我想将对熊猫数据帧的以下过滤减少到一行
第一个示例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的列值之间进行布尔运算或,以查看所有值是否为真。
我能够做到这一点,分两行:
dff2 = dff.loc[(dff['myfiltercol'] == 1),['D','E']]
result = all(dff2['D'] | dff2['E'])
出于某种原因,我需要一支衬板。 有人知道吗?
谢谢。
答案 0 :(得分:2)
您可以在两列之间使用DataFrame.any
代替 logic或,因为您已经在它们上建立了索引,并且DataFrame.all
减小为单个布尔值:
dff.loc[(dff['myfiltercol'] == 1),['D','E']].any(1).all()
# True
或者如果这些都是您所需要的列,您也可以这样做:
dff.set_index('myfiltercol').loc[1].any(1).all()
# True
答案 1 :(得分:1)
这会吗?:
>>> dff.loc[(dff['myfiltercol'] == 1),:].eval('D | E').all()
True