Python:将一个数据帧的值添加到另一个数据帧的某些行中
我有一个数据框Python:将一个数据帧的值添加到另一个数据帧的某些行中,python,pandas,dataframe,replace,row,Python,Pandas,Dataframe,Replace,Row,我有一个数据框df1,它保存某个国家和英国之间数千笔交易的行。我还有另一个数据帧df2,它保存了某些国家和英国之间的距离的几行数据 例如: x1 = [{'partner': "Afghanistan", 'trade_value':100}, {'partner':"Zambia",'trade_value':110}, {'partner': "Germany",'trade_value':120}, {'partner': "Afghanistan"
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填充了所有的距离栏,这是阿富汗和英国之间的弥补距离,但所有其他国家都得到了相同的值(有些国家甚至不应该得到任何值)IIUC您可以使用
你是一个救生员,我刚刚在我的实际数据帧上测试了它,它不仅有效,而且花费了不到一个小时的时间second@HassanDbouk
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