Python 3.x 对熊猫中的所有分组数据应用排序功能?

Python 3.x 对熊猫中的所有分组数据应用排序功能?,python-3.x,pandas,Python 3.x,Pandas,例如,我有一个数据帧: A B 1 1 1 1 4 0 5 1 6 1 7 0 1 1 4 0 5 0 6 1 4 0 我想把所有的“组”放在A中(所有的1,所有的2,所有的3,等等,或者如果字符串,所有相同的字符串),它们在B中有1(或者包含一个大于或等于某物的值) 所以这里的输出是 A B 1 1 1 1 5 1 6 1 1 1 5 0 6 1 我在脑海中想象的是: df[(df['A']==groupedAsSameThing?&(df['B']>=0.5)]如果我理解正确,这是gro

例如,我有一个数据帧:

A B
1 1
1 1
4 0
5 1
6 1
7 0
1 1
4 0
5 0
6 1
4 0
我想把所有的“组”放在A中(所有的1,所有的2,所有的3,等等,或者如果字符串,所有相同的字符串),它们在B中有1(或者包含一个大于或等于某物的值)

所以这里的输出是

A B
1 1
1 1
5 1
6 1
1 1
5 0
6 1
我在脑海中想象的是:


df[(df['A']==groupedAsSameThing?&(df['B']>=0.5)]

如果我理解正确,这是
groupby().transform()

输出:

   A  B
0  1  1
1  1  1
3  5  1
4  6  1
6  1  1
8  5  0
9  6  1
您可以简单地使用:

df[df.A.isin(df.loc[df.B>0,'A'])]
这是一种符合您需要的文字方法:当您过滤掉df[B]>0的所有行时,df[a]在df[a]列中

Out[10]: 
   A  B
0  1  1
1  1  1
3  5  1
4  6  1
6  1  1
8  5  0
9  6  1

有一个GroupBy.filter正好用于此

df = df.groupby('A', as_index=False).filter(lambda g: (g['B'] > 0).any())

IIUC是什么意思?@ArcoBast谢谢,但我必须使用transform('max')吗?这不包括“如果它是字符串”的情况。如果两者都是字符串,我就不能使用该代码。一般来说当然。我必须将“max”替换为“any”,否则会引发错误。我明白你的意思,所以
B
列也包含字符串?不寻常的用例,但是如果
any
适合您,那么
any
就是:-)。感谢您的解释。
df[df.groupby('A')['B'].transform('any')]
谢谢。我一直在想如何正确使用groupby。这同样有效。这两种情况都适用于字符串和浮点。很好,这涵盖了字符串和浮点的情况,我不必使用“groupby”。
df = df.groupby('A', as_index=False).filter(lambda g: (g['B'] > 0).any())