使用 pandas/python 当数据框中列值的出现次数小于一定数量时删除行?

Kal*_*lol 4 python dataframe pandas

我有一个像这样的数据框:

df
col1    col2
A         1
B         1
C         2
D         3
D         2
B         1
D         5
Run Code Online (Sandbox Code Playgroud)

我已经看到带有 B 和 D 的 col1 值在数据框中出现了不止一次。

我想保留那些出现次数超过一次的值,最终的数据框将如下所示:

col1     col2
 B         1
 D         3
 D         2
 B         1
 D         5
Run Code Online (Sandbox Code Playgroud)

如何使用 pandas/python 以最有效的方式做到这一点?

jez*_*ael 5

DataFrame.duplicated与指定列一起使用col1以搜索重复项,并使用keep=Falsefor returnTrue来搜索所有重复项行,最后按以下筛选boolean indexing

df = df[df.duplicated('col1', keep=False)]
print (df)
  col1  col2
1    B     1
3    D     3
4    D     2
5    B     1
6    D     5
Run Code Online (Sandbox Code Playgroud)

如果需要指定阈值,请使用transformsize第一个解决方案相同的方式进行过滤:

df = df[df.groupby('col1')['col1'].transform('size') > 1]
print (df)
  col1  col2
1    B     1
3    D     3
4    D     2
5    B     1
6    D     5
Run Code Online (Sandbox Code Playgroud)

value_counts与 的替代解决方案map

df = df[df['col1'].map(df['col1'].value_counts()) > 1]
Run Code Online (Sandbox Code Playgroud)

如果性能不重要,请使用DataFrameGroupBy.filter

df = df.groupby('col1').filter(lambda x: len(x) > 1)
Run Code Online (Sandbox Code Playgroud)