熊猫:选择groupby.sum()满足条件的行

Dom*_*ikS 5 python pandas pandas-groupby

在熊猫中,我有以下形式的数据框:

>>> import pandas as pd  
>>> df = pd.DataFrame({'ID':[51,51,51,24,24,24,31], 'x':[0,1,0,0,1,1,0]})
>>> df

ID   x
51   0
51   1
51   0
24   0
24   1
24   1
31   0
Run Code Online (Sandbox Code Playgroud)

对于每个“ ID”,多次记录“ x”的值,它的值是0或1。我想从中选择那些df包含“ x”至少为1的“ ID”的行。

对于每个“ ID”,我设法计算“ x”为1的次数,

>>> df.groupby('ID')['x'].sum()

ID
51    1
24    2
31    0
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何从这里开始。我想要以下输出:

ID   x
24   0
24   1
24   1
Run Code Online (Sandbox Code Playgroud)

Sco*_*ton 5

使用groupbyfilter

df.groupby('ID').filter(lambda s: s.x.sum()>=2)
Run Code Online (Sandbox Code Playgroud)

输出:

   ID  x
3  24  0
4  24  1
5  24  1
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 5

df = pd.DataFrame({'ID':[51,51,51,24,24,24,31], 'x':[0,1,0,0,1,1,0]})
df.loc[df.groupby(['ID'])['x'].transform(func=sum)>=2,:]
out:
   ID  x
3  24  0
4  24  1
5  24  1
Run Code Online (Sandbox Code Playgroud)