Skip to main content
 首页 » 编程设计

python之如何将另一个 DataFrame 的值添加到列匹配的行中

2025年05月04日16wayfarer

我有两个数据框:

a = pd.DataFrame() 
a['id'] = range(0,100) 
a['N'] = 100 
 
b = pd.DataFrame() 
b['id'] = 3*np.arange(0,100) 
b['N'] = 50 

我想做的是 a 中的行'id'在哪里匹配'id' b 中的一排添加b['N'] .使用非常低效且编码不佳的 for 循环,这将类似于:

for idx in a[a.id.isin(b.id)].index: 
    a.loc[idx, 'N'] = a.loc[idx, 'N'] + b.loc[b.id == a.loc[idx, 'id'], 'N'].iloc[0] 

有没有一种方法可以完成上述操作,但具有高效的 DataFrame 操作?例如,更好的方法可能是只获取 a 中的行。和 b有匹配 'id' ,按升序对它们进行排序(以便它们是相同顺序的完全相同的 ID),然后只需添加 'N'柱子。这将需要我们选择行,对它们进行排序,添加它们,最后连接回 a 的行。没有匹配 'id'在b ,但也显得效率低下。在 pandas/numpy 中推荐的做法是什么

请您参考如下方法:

假设“id”是唯一的,你可以使用Series.map并添加映射值:

a['N'] = a['N'].add(a['id'].map(b.set_index('id')['N']), fill_value=0) 
 
a 
    id      N 
0    0  150.0 
1    1  100.0 
2    2  100.0 
3    3  150.0 
4    4  100.0 
..  ..    ... 
95  95  100.0 
96  96  150.0 
97  97  100.0 
98  98  100.0 
99  99  150.0 
 
[100 rows x 2 columns]