我有一个很大的数据框,其中有很多重复项。我想保留每个重复项的第一个和最后一个条目,但是将它们之间的每个重复项删除。
我已经尝试通过使用带有参数“ first”和“ last”的df.drop_duplicates来完成此操作,以获取两个数据帧,然后将它们再次合并到一个df中,所以我拥有第一个和最后一个条目,但是没用。
df_first = df
df_last = df
df_first['Path'].drop_duplicates(keep='first', inplace=True)
df_last['Path'].drop_duplicates(keep='last', inplace=True)
谢谢您的帮助!
答案 0 :(得分:2)
如果组的长度为1
,请使用GroupBy.nth
避免重复:
df = pd.DataFrame({
'a':[5,3,6,9,2,4],
'Path':list('aaabbc')
})
print(df)
a Path
0 5 a
1 3 a
2 6 a
3 9 b
4 2 b
5 4 c
df = df.groupby('Path').nth([0, -1])
print (df)
a
Path
a 5
a 6
b 9
b 2
c 4
答案 1 :(得分:0)
**使用group.nth,这是先前解决方案的更新代码,可获取第n个条目
def keep_second_dup(duplicate):
duplicate[Columnname]=duplicate[Columnname'].value_counts()
second_duplicate=duplicate[duplicate['Count']>=1]
residual=duplicate[duplicate['Count']==1]
sec=second_duplicated.groupby([Columnname]).nth([1]).reset_index()
final_data=pd.concat([sec,residual])
final_data.drop('Count',axis=1,inplace=True)
return final_data