Предположим, у нас есть следующие два кадра данных: df1
и df2
x1 = [{'partner': "Afghanistan", 'trade_value':100, 'commodity': 1, 'year': 2013},
{'partner': "Zambia",'trade_value':110, 'commodity': 2, 'year': 2016},
{'partner': "Germany",'trade_value':120, 'commodity': 2, 'year': 2014},
{'partner': "Afghanistan",'trade_value':150, 'commodity': 2, 'year': 2014},
{'partner': "USA",'trade_value':1120, 'commodity': 5, 'year': 2013}];
df1 = pd.DataFrame(x1)
#Add GDP column
df1['GDP'] = 0;
x2 = [{'country': "Afghanistan", 'commodity': 5, 'GDP-2013': 5000, 'GDP-2014': 5500},
{'country': "USA", 'commodity': 5, 'GDP-2013': 15012, 'GDP-2014': 16500},
{'country': "Germany", 'commodity': 7, 'GDP-2013': 7500, 'GDP-2014': 8300}];
df2 = pd.DataFrame(x2)
Что я хочу сделать, это добавить ВВП для стран в df1
из df2
на основегод, указанный в df1
.
Например: для первой строки в df1
я хочу получить ВВП для Afghanistan
для года 2013
.Я должен был бы пройти через df2
и найти строку с соответствующими country
и GDP-year
, а затем получить значение в GDP-year
Окончательный вывод df1
должен выглядеть примерно так:
| partner | trade_value | commodity | year | GDP |
|------------|-------------|-----------|--------|-------|
| Afghanistan| 100 | 1 | 2013 | 5000 |
| Zambia | 110 | 2 | 2016 | NaN |
| Germany | 120 | 2 | 2014 | 8300 |
| Afghanistan| 150 | 2 | 2014 | 5500 |
| USA | 1120 | 5 | 2013 | 16500|
Я часами пробовал методы map
и loc
, но ничего не получалось.Я сейчас работаю над этим:
for index, row in df2.iterrows():
for column in df2:
df1.loc[df1['partner'] == row['country'] and 'GDP-'+str(df1['year']) == column, ['GDP']] = row[column];
Я получаю следующую ошибку:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().