Python 如何根据表中的列条件选择多行作为组
如何根据列条件选择不同匹配组中的所有行 数据:Python 如何根据表中的列条件选择多行作为组,python,python-3.x,pandas,Python,Python 3.x,Pandas,如何根据列条件选择不同匹配组中的所有行 数据: **A B C D** 101 1 1 FALSE 101 1 2 FALSE 101 1 3 FALSE 101 2 1 FALSE 101 2 2 FALSE 101 2 3 FALSE 101 2 4 TRUE 102 1 1 FALSE 102 1 2 FALSE 102 1 3 FALSE 102 2 1 FALSE
**A B C D**
101 1 1 FALSE
101 1 2 FALSE
101 1 3 FALSE
101 2 1 FALSE
101 2 2 FALSE
101 2 3 FALSE
101 2 4 TRUE
102 1 1 FALSE
102 1 2 FALSE
102 1 3 FALSE
102 2 1 FALSE
102 2 2 FALSE
102 2 3 TRUE
**A B C D**
101 2 1 FALSE
101 2 2 FALSE
101 2 3 FALSE
101 2 4 TRUE
102 2 1 FALSE
102 2 2 FALSE
102 2 3 TRUE
预期输出:
**A B C D**
101 1 1 FALSE
101 1 2 FALSE
101 1 3 FALSE
101 2 1 FALSE
101 2 2 FALSE
101 2 3 FALSE
101 2 4 TRUE
102 1 1 FALSE
102 1 2 FALSE
102 1 3 FALSE
102 2 1 FALSE
102 2 2 FALSE
102 2 3 TRUE
**A B C D**
101 2 1 FALSE
101 2 2 FALSE
101 2 3 FALSE
101 2 4 TRUE
102 2 1 FALSE
102 2 2 FALSE
102 2 3 TRUE
我需要B=(D=True时的B)的所有行
IIUC,使用+
IIUC,使用+
这里有一种方法来自
transform
df[df.groupby(['A','B']).D.transform('mean')>0]
Out[256]:
A B C D
3 101 2 1 False
4 101 2 2 False
5 101 2 3 False
6 101 2 4 True
10 102 2 1 False
11 102 2 2 False
12 102 2 3 True
使用any
df[df.groupby(['A','B']).D.transform('any')]
这里有一种方法来自
transform
df[df.groupby(['A','B']).D.transform('mean')>0]
Out[256]:
A B C D
3 101 2 1 False
4 101 2 2 False
5 101 2 3 False
6 101 2 4 True
10 102 2 1 False
11 102 2 2 False
12 102 2 3 True
使用any
df[df.groupby(['A','B']).D.transform('any')]
@拉斐尔从加速方面说是的,因为任何一个都会在找到正确答案时停止,威尔update@rafaelc从加速方面来说,是的,因为任何一个都会在找到正确答案时停止,所以会更新答案。一个简单的问题,当D列中有不同的值而不是true或false时,如何获得相同的结果<代码>df.groupby(['A','B']).filter(lambda s:s['D']=='apple')我得到“filter函数返回了一个序列,但需要一个标量bool”error@Cks视情况而定。你只需要改变lambda函数中的条件。例如,如果您想根据列
D
中至少有一个值'some_value'
进行筛选,您可以编写(s['D']=='some_value')。any()
@Cks必须查看末尾的any()
)谢谢你的回答。一个简单的问题,当D列中有不同的值而不是true或false时,如何获得相同的结果<代码>df.groupby(['A','B']).filter(lambda s:s['D']=='apple')我得到“filter函数返回了一个序列,但需要一个标量bool”error@Cks视情况而定。你只需要改变lambda函数中的条件。例如,如果您想根据列D
中至少有一个值'some_value'
进行筛选,您可以编写(s['D']=='some_value')。any()
@Cks必须查看末尾的any()
)