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 以最有效的方式做到这一点?
DataFrame.duplicated
与指定列一起使用col1
以搜索重复项,并使用keep=False
for 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)
如果需要指定阈值,请使用transform
与size
第一个解决方案相同的方式进行过滤:
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)