Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据表中的列条件选择多行作为组_Python_Python 3.x_Pandas - Fatal编程技术网

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()