Skip to main content
 首页 » 编程设计

python之如何从 Pandas 数据框中删除累积对,只保留其中一个

2025年05月04日19duanxz

我正在将一些代码从 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  
 

请您参考如下方法:

你为什么不试试这个:

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