首页 > 解决方案 > Pandas:如何删除特定数量的重复行?

问题描述

我希望你一切都好。所以我想删除特定数量的重复行。让我通过一个例子来解释:

    A   B   C
0   foo 2   3
1   foo nan 9
2   foo 1   4
3   bar 8   nan
4   xxx 9   10
5   xxx 4   4
6   xxx 9   6

因此,我们基于 A 列复制了行,因此对于“foo”,我想删除 2 个重复行,对于“xxx”,我只想删除一行。drop_duplicates 方法可以保留 0 行或 1 行,所以它对我没有帮助。

提前致谢。

标签: pythonpandasduplicatesrowsdrop

解决方案


可能不是最佳解决方案,但这个可行:

df = pd.DataFrame({
    'A': ['foo','foo','foo','bar','xxx','xxx','xxx'],
    'B': [2,np.nan,1,8,9,4,9],
    'C': [3,9,4,np.nan,10,4,6]
})
nb_drops = {'foo':2, 'xxx':1}
df2 = pd.DataFrame()
for k, v in nb_drops.items():
  df2 = df2.append(df[df['A'] == k].head(v))
df = df.drop_duplicates(subset=['A'])
df = df.merge(df2,how='outer')
df

    A   B   C
0   foo 2.0 3.0
1   bar 8.0 NaN
2   xxx 9.0 10.0
3   foo NaN 9.0

推荐阅读