Python: добавление значений из одного кадра данных в другой (с несколькими условиями) - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть два кадра данных 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  |

1 Ответ

0 голосов
/ 23 ноября 2018

merge

Вы можете просто использовать merge, чтобы объединить два кадра данных в перекрывающихся столбцах:

pd.merge(left=df1, right=df2, how='left', left_on=['partner', 'commodity'],
         right_on = ['country', 'commodity']).drop(['country'], axis = 1)

     commodity      partner  trade_value  tariff
0          1  Afghanistan          100     9.9
1          2       Zambia          110     NaN
2          2      Germany          120     8.8
3          2  Afghanistan          150     1.4
4          5          USA         1120     4.3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...