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 微秒)
我有一个 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 微秒)