как правильно объединить два кадра данных панд - PullRequest
0 голосов
/ 24 мая 2018

У меня есть 2 кадра данных

df1

Code  Sales  Store
A       10   alpha
B        5   beta
C        4   gamma
B        3   alpha

df2

Code   Unit_Price  
A          2       
B          3     
C          4
D          5
E          6

Я хочу сделать 2 вещи здесь.

Во-первых, я хочу проверить, что все уникальные коды в df1 есть в df2

Во-вторых, я хочу объединить эти 2 df2 по кодам

df3, должно выглядеть так:

Code  Sales  Store   unit_price
A       10   alpha      2
B        5   beta       3
C        4   gamma      4
D        3   alpha      5

Я сделал

df3 = df1.merge(df2,on='Code',how='left')

Не уверен, что я прав, я буду признателен за ваше время и усилия, чтобы помочь мне в этой записи

1 Ответ

0 голосов
/ 24 мая 2018

Нужно numpy.setdiff1d для проверки членства уникальных значений столбцов:

print (np.setdiff1d(df1['Code'].unique(), df1['Code'].unique()))
[]

print (np.setdiff1d(df2['Code'].unique(), df1['Code'].unique()))
['D' 'E']

Ваше решение хорошо, особенно если нужно добавить больше столбцов, таких как:

print (df2)
  Code  Unit_Price  col
0    A           2    7
1    B           3    2
2    C           4    1
3    D           5    0
4    E           6    3

df3 = df1.merge(df2,on='Code',how='left')
print (df3)
  Code  Sales  Store  Unit_Price  col
0    A     10  alpha           2    7
1    B      5   beta           3    2
2    C      4  gamma           4    1
3    B      3  alpha           3    2

Если необходимо добавить только один столбец, используйте map от Series что должно быть быстрее:

df1['unit_price'] = df1['Code'].map(df2.set_index('Code')['Unit_Price'])
print (df1)
  Code  Sales  Store  unit_price
0    A     10  alpha           2
1    B      5   beta           3
2    C      4  gamma           4
3    B      3  alpha           3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...