Pandas:如何删除特定数量的重复行?

问题描述

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

import React,{useState} from 'react'

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

提前致谢。

解决方法

可能不是最佳解决方案,但此方法有效:

df = pd.DataFrame({
    'A': ['foo','foo','bar','xxx','xxx'],'B': [2,np.nan,1,8,9,4,9],'C': [3,10,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
,

我制作了这个代码并且它有效......

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': ['foo',6]

nb_drops = {'foo':2,'xxx':1}
rows_to_delete = []
for item in nb_drops :
    indices_item = list(df[df['A'] == item].index)
    rows_to_delete += range(indices_item[-1] - nb_drops[item] + 1,indices_item[-1] + 1)

df.drop(rows_to_delete,inplace = True)