【发布时间】:2018-11-23 15:49:47
【问题描述】:
我有两个数据框 df1 和 df2 看起来像这样:
例子:
x1 = [{'partner': "Afghanistan", 'trade_value':100, 'commodity': 1},
{'partner':"Zambia",'trade_value':110, 'commodity': 2},
{'partner': "Germany",'trade_value':120, 'commodity': 2},
{'partner': "Afghanistan",'trade_value':150, 'commodity': 2},
{'partner': "USA",'trade_value':1120, 'commodity': 5}];
df1 = pd.DataFrame(x1)
x2 = [{'country': "Afghanistan", 'commodity': 5, 'tariff': 3.5},
{'country': "Afghanistan", 'commodity': 3, 'tariff': 6.2},
{'country': "Afghanistan", 'commodity': 1, 'tariff': 9.9},
{'country': "Afghanistan", 'commodity': 2, 'tariff': 1.4},
{'country': "USA", 'commodity': 5, 'tariff': 4.3},
{'country': "Germany", 'commodity': 7, 'tariff': 6.5},
{'country': "Germany", 'commodity': 2, 'tariff': 8.8}];
df2 = pd.DataFrame(x2)
我想向df1 添加一个名为“关税”的新列,并为df1 中的每个“合作伙伴”和“商品”分配来自df2 的相应“关税”。
注意:有时df1 中的“合作伙伴”国家/地区会由于多次交易而重复出现。此外,df2 中并非所有关税都可用,所以我不介意将df1 中的单元格留空。
目前我处于这个阶段:
#Add new column
df1['tariff'] = 0;
for index, row in df1.iterrows():
for index, row2 in df2.iterrows():
if row['partner'] == row2['country']:
if row['commodity'] == row2['commodity']
#Dont know what to put here
如果我使用df1['tariff'].replace(row['tariff'],row2['tariff'],inplace=True);,我会得到所有关税栏都填满关税 9.9
df1 的输出应该是这样的:
| partner | trade_value | commodity | tariff |
|------------|-------------|-----------|--------|
| Afghanistan| 100 | 1 | 9.9 |
| Zambia | 110 | 2 | NaN |
| Germany | 120 | 2 | 8.8 |
| Afghanistan| 150 | 2 | 1.4 |
| USA | 1120 | 5 | 4.3 |
【问题讨论】:
-
你的预期输出是什么
-
@W-B 我应该为
df1增加一个名为tariff的列。关税下的值应该根据国家,商品代码在df2...所以基本上我有两个条件添加关税(国家和商品必须匹配)
标签: python pandas dataframe row multiple-columns