Pandas select 行,如果 ID 出现多次

Pandas select rows if ID appear several time

我有一个 table 这样的:

CustID  Purchase  Time
A       Item1     01/01/2011
B       Item2     01/01/2011   
C       Item1     01/02/2011   
A       Item2     03/01/2011   

我希望 select 具有 CustID 的行在 table 中出现超过 1 个。

这可行:

counts = df['CustID'].value_counts()
df[df['CustID'].isin(counts.index[counts > 1])]

结果:

  CustID Purchase        Time
0      A    Item1  01/01/2011
3      A    Item2  03/01/2011

使用filter

df.groupby('CustID').filter(lambda x: len(x) > 1)
  CustID Purchase        Time
0      A    Item1  01/01/2011
3      A    Item2  03/01/2011
df[df['CustID'].duplicated(keep=False)]

这会在数据框中找到 CustID 列中存在重复项的行。 keep=False 告诉 duplicated 函数将所有重复行标记为 True(而不是仅第一个或最后一个):

  CustID Purchase        Time
0      A    Item1  01/01/2011
3      A    Item2  03/01/2011

编辑

查看 duplicated 的文档,您似乎也可以这样做:

df[df.duplicated('CustID', keep=False)]

虽然这似乎比原来慢了 100 微秒(基于示例数据帧,458 微秒对 545 微秒)