df:
id c1 c2 c3
101 a b c
102 b c d
103 d e f
101 h i j
102 k l m
Run Code Online (Sandbox Code Playgroud)
我想根据对id列进行分组来选择行count > 1
结果应该是所有id条目超过1个的行
预期结果:
df:
id c1 c2 c3
101 a b c
102 b c d
101 h i j
102 k l m
Run Code Online (Sandbox Code Playgroud)
我可以使用下面编写的代码实现这一目标。
g = df.groupby('id').size().reset_index(name='counts')
filt = g.query('counts > 1')
m_filt = df.id.isin (filt.id)
df_filtered= df[m_filt]
Run Code Online (Sandbox Code Playgroud)
想检查是否有更好的方法。
GroupBy.transform与GroupBy.sizefor一起使用,Series其大小与原始大小相同DataFrame,因此可以按以下条件过滤boolean indexing:
df[df.groupby('id').transform('size')['id'].gt(1)]
Run Code Online (Sandbox Code Playgroud)
或者,如果需要所有重复的行,请DataFrame.duplicated使用keep=False:
df[df.duplicated('id', keep=False)]
Run Code Online (Sandbox Code Playgroud)
或类似:
df[df['id'].duplicated(keep=False)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |