我有两个DataFrame:
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]
关于python - 如何将另一个DataFrame中的值添加到与列匹配的行中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59352343/