熊猫过滤和一栏布尔操作可能吗?

时间:2020-02-09 19:28:13

标签: python pandas

我想将对熊猫数据帧的以下过滤减少到一行

第一个示例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'])

出于某种原因,我需要一支衬板。 有人知道吗?

谢谢。

2 个答案:

答案 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
相关问题