Python:将一个数据框的值添加到另一数据框的某些行

时间:2018-11-22 21:36:40

标签: 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",'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>

1 个答案:

答案 0 :(得分:3)

可以使用.map

的IIUC
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