Skip to main content
 首页 » 编程设计

python之比较两个数据框之间的元素并在相等的情况下添加列

2025年05月04日18telwanggs

考虑如下两个数据框:

import pandas as pd 
 
df_rp = pd.DataFrame({'id':[1,2,3,4,5,6,7,8], 'res': ['a','b','c','d','e','f','g','h']}) 
 
df_cdr = pd.DataFrame({'id':[1,2,5,6,7,1,2,3,8,9,3,4,8],  
                       'LATITUDE':[-22.98, -22.97, -22.92, -22.87, -22.89, -22.84, -22.98,  
                                   -22.14, -22.28, -22.42, -22.56, -22.70, -22.13],  
                       'LONGITUDE':[-43.19, -43.39, -43.24, -43.28, -43.67, -43.11, -43.22, 
                                   -43.33, -43.44, -43.55, -43.66, -43.77, -43.88]}) 

我必须做的:

  • 将每个 df_rp['id'] 元素与每个 df_cdr['id'] 元素进行比较;
  • 如果相同,我需要在数据结构(列表、系列等)中添加与id在同一行的纬度和经度,不重复id。

下面是我需要如何对数据进行分组的示例:

1:[-22.98,-43.19],[-22.84,-43.11]  
2:[-22.97,-43.39],[-22.98,-43.22] 
3:[-22.14,-43.33],[-22.56,-43.66] 
4:[-22.70,-43.77] 
5:[-22.92,-43.24] 
6:[-22.87,-43.28] 
7:[-22.89,-43.67] 
8:[-22.28,-43.44],[-22.13,-43.88] 

我很难选择哪种数据结构最适合这种情况(就像我在示例中所做的那样,看起来像一个字典,但会有多个字典)以及如何在不重复的情况下将纬度和对数添加到对ID。我感谢任何帮助。

请您参考如下方法:

我们需要 agg 第二个 df ,然后 reindex 将其分配回来

df_rp['L$L']=df_cdr.drop('id',1).apply(tuple,1).groupby(df_cdr.id).agg(list).reindex(df_rp.id).to_numpy() 
df_rp 
Out[59]:  
   id res                                   L$L 
0   1   a  [(-22.98, -43.19), (-22.84, -43.11)] 
1   2   b  [(-22.97, -43.39), (-22.98, -43.22)] 
2   3   c  [(-22.14, -43.33), (-22.56, -43.66)] 
3   4   d                     [(-22.7, -43.77)] 
4   5   e                    [(-22.92, -43.24)] 
5   6   f                    [(-22.87, -43.28)] 
6   7   g                    [(-22.89, -43.67)] 
7   8   h  [(-22.28, -43.44), (-22.13, -43.88)]