Python: добавление значений одного Dataframe в несколько строк другого Dataframe - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть фрейм данных 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, что составляет выровненное расстояние между Афганистаном и Великобританией, но все другие страны получают одинаковое значение (когда некоторые страны вообще не должны получать никакого значения)

1 Ответ

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

IIUC вы можете использовать .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...