我有一个数据框 df1
,其中包含某个国家和英国之间数千笔交易的行。我还有另一个数据框 df2
,它包含几行特定国家和英国之间的距离。
例子:
x1 = [{'partner': "Afghanistan", 'trade_value':100},
{'partner':"Zambia",'trade_value':110},
{'partner': "Germany",'trade_value':120},
{'partner': "Afghanistan",'trade_value':150},
{'partner': "USA",'trade_value':1120}]
df1 = pd.DataFrame(x1)
x2 = [{'country': "Afghanistan", 'distance':1000},
{'country': "USA",'distance':1120}];
df2 = pd.DataFrame(x2)
我想向 df1
添加一个名为“distance”的新列,并为 df1
中的每个“伙伴”分配与 df2< 的适当“距离”/
.
注意:有时由于多次交易,df1
中的“伙伴”国家会重复出现。此外,并非所有距离都在 df2
中可用,因此我不介意将 df1 中的单元格留空。
到目前为止,我尝试这样做无济于事:
#Add new column
df1['distance'] = 0;
for index, row in df1.iterrows():
for index, row2 in df2.iterrows():
if row['partner'] == row2['country']:
df1['distance'].replace(row['distance'], row2['distance'],inplace=True);
我得到的所有距离列都填满了 1000,这是阿富汗和英国之间的弥补距离,但所有其他国家/地区都获得了相同的值(有些国家甚至根本不应该获得任何值)
最佳答案
您可以使用 IIUC .map
x1 = [{'partner':"Afghanistan", 'trade_value':100}, {'partner':"Zambia",'trade_value':110},
{'partner': "Germany",'trade_value':120},
{'partner': "Afghanistan",'trade_value':150},{'partner': "USA",'trade_value':1120}]
df1 = pd.DataFrame(x1)
x2 = [{'country': "Afghanistan", 'distance':1000}, {'country': "USA",'distance':1120}]
df2 = pd.DataFrame(x2)
df1['distance'] = df1['partner'].map(df2.set_index('country')['distance'])
print (df1)
partner trade_value distance
0 Afghanistan 100 1000.0
1 Zambia 110 NaN
2 Germany 120 NaN
3 Afghanistan 150 1000.0
4 USA 1120 1120.0
关于Python:将一个数据框的值添加到另一个数据框的某些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53438230/