首页 > 解决方案 > 如何从熊猫数据框中删除累积对,只保留其中一个

问题描述

我正在将一些代码从 R 翻译成 python。我想删除具有相同 id 的对,只将其中一个保留在数据框中。

此外,我不能按“id”删除重复项,因为我可能有多个组合用于相同的“id”,这可能不是累积对示例:

       id                 value.x      value.y 
1: 100057    38953993985    38993095846 
2: 100057   38993095845    38953993985  
3: 100057    38993095845    38993095846
4. 100057   38993095846    38953993985

这是R代码:

res <- df[df[, .I[1], by = list(pmin(value.x, value.y), pmax(value.x, value.y))]$V1]

输入 df 如下所示:

> head(df)

       id      value.x      value.y 
1: 100011 38989281716 38996868028   
2: 100011 38996868028 38989281716  
3: 100019 38916115350 38994231881  
4: 100019 38994231881 38916115350 
5: 100031 38911588267 38993358322
6: 100031 38993358322 38911588267  

输出应该是

> head(res)

       id      value.x      value.y 
1: 100011 38989281716 38996868028 
2: 100019 38916115350 38994231881  
3: 100031 38911588267 38993358322 

标签: pythonpandas

解决方案


你为什么不试试这个:

df['value'] = df.apply(lambda x: x['value.x'].astype(str) +x['value.y'].astype(str) if x['value.x']>x['value.y'] else  x['value.y'].astype(str) +x['value.x'].astype(str) , axis = 1)
df.drop_duplicates(subset='value', keep='first', inplace=True)

       id      value.x      value.y
0  100011  38989281716  38996868028
1  100011  38996868028  38989281716
2  100019  38916115350  38994231881
3  100019  38994231881  38916115350
4  100031  38911588267  38993358322
5  100031  38993358322  38911588267
       id      value.x      value.y                   value
0  100011  38989281716  38996868028  3899686802838989281716
2  100019  38916115350  38994231881  3899423188138916115350
4  100031  38911588267  38993358322  3899335832238911588267

推荐阅读