我有一个数据框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
中添加一个称为“距离”的新列,并为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填充所有的距离列,这是阿富汗和英国之间的固定距离,但是所有其他国家/地区都获得了相同的价值(有些国家甚至根本没有获得任何价值)< / p>
答案 0 :(得分:3)
可以使用.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