Я пытаюсь соединить два фрейма данных, но не могу понять, какие возможности предлагает Python.

Первый кадр данных:

ID MODEL   REQUESTS ORDERS
1  Golf    123      4
2  Passat  34       5
3  Model 3 500      8
4  M3      5        0

Второй кадр данных:

MODEL   TYPE  MAKE
Golf    Sedan Volkswagen
M3      Coupe BMW
Model 3 Sedan Tesla

Я хочу добавить еще один столбец в первый фрейм данных с именем «make», чтобы он выглядел так:

ID MODEL   MAKE       REQUESTS ORDERS
1  Golf    Volkswagen 123      4
2  Passat  Volkswagen 34       5
3  Model 3 Tesla      500      8
4  M3      BMW        5        0

Я уже рассмотрел слияние, объединение и сопоставление, но все примеры просто добавили необходимую информацию в конце информационного кадра.

12
Christian 6 Янв 2017 в 21:11

4 ответа

Лучший ответ

Я думаю, что вы можете использовать insert с map от { {X2}}, созданный с помощью df2 (если какое-либо значение в столбце MODEL в df2 отсутствует, get NaN):

df1.insert(2, 'MAKE', df1['MODEL'].map(df2.set_index('MODEL')['MAKE']))
print (df1)
   ID    MODEL        MAKE  REQUESTS  ORDERS
0   1     Golf  Volkswagen       123       4
1   2   Passat         NaN        34       5
2   3  Model 3       Tesla       500       8
3   4       M3         BMW         5       0
10
jezrael 6 Янв 2017 в 18:19

Хотя не в этом случае, но могут быть сценарии, в которых df2 имеет более двух столбцов, и вам просто нужно добавить один из них в df1 на основе определенного столбца в качестве ключа. Вот общий код, который вы можете найти полезным.

df = pd.merge(df1, df2[['MODEL', 'MAKE']], on = 'MODEL', how = 'left')
2
Bhagabat Behera 24 Июн 2018 в 12:40

Я всегда находил слияние простым способом сделать это:

df1.merge(df2[['MODEL', 'MAKE']], how = 'left')

Тем не менее, я должен признать, что было бы не так коротко и приятно, если бы вы хотели назвать новый столбец чем-то иным, чем «MAKE».

1
Yona 28 Июн 2017 в 08:55

Метод join действует очень похоже на VLOOKUP. Он соединяет столбец в первом кадре данных с индексом второго кадра данных, поэтому вы должны установить MODEL в качестве индекса во втором кадре данных и захватить только столбец MAKE.

df.join(df1.set_index('MODEL')['MAKE'], on='MODEL')

Ознакомьтесь с документацией. для соединения, поскольку оно фактически использует слово VLOOKUP.

1
Ted Petrou 6 Янв 2017 в 18:19