Как я могу объединить два кадра данных различной длины строки на основе общего столбца - PullRequest
0 голосов
/ 20 мая 2019

У меня есть два кадра данных различной длины, и я хочу объединить их на основе общего значения в определенном столбце.Я хочу, чтобы столбец чисел суммировался, если столбец Тикера совпадает.например, я хочу, чтобы новый столбец и значение для EMBR3 BZ были 2967205158 (2967200592 + 4566), в то время как строка тикера ASURB MM будет сохранена на 3356205474, поскольку она отсутствует в df2.

, чтобы добавить к этому, у меня также есть столбцы после числового столбца в обоих информационных кадрах, которые не показаны ниже, потому что есть слишком много столбцов, и я не хочу терять их в моем конечном выводе.если я использую pd.merge, я теряю столбцы после Number в df1.я действительно борюсь с этим и был бы признателен, если бы кто-то мог помочь мне, спасибо!

df1 

Ticker        Number
EMBR3 BZ    2967200592
LREN3 BZ    7655250160
ASURB MM    3356205474
ISA         2095646662
DFD         6765767657
L65N3 BZ    765545664

df2

Ticker        Number
EMBR3 BZ    4566
LREN3 BZ    3776
ISA         46575

output 

Ticker        Number            New Number
EMBR3 BZ    2967200592         2967205158
LREN3 BZ    7655250160         7655253936
ASURB MM    3356205474         3356205474
ISA         2095646662         2095693237
DFD         6765767657         6765767657           
L65N3 BZ    765545664          765545664


Ответы [ 2 ]

0 голосов
/ 20 мая 2019

join сохраняет исходный индекс кадра данных.Это позволяет построить простую серию с правильным индексом и использовать ее непосредственно в исходном кадре данных.

Здесь новая серия будет содержать значения df2.Number, 0 для других строк и приведена к целому числу.:

df1.join(df2.set_index('Ticker'),on='Ticker', lsuffix='_').Number.fillna(0).astype(int)

Затем мы можем использовать его для добавления нового столбца в первый кадр данных:

df1['New Number'] = df1['Number'] + df1.join(df2.set_index('Ticker'),on='Ticker',
                                             lsuffix='_').Number.fillna(0).astype(int)
0 голосов
/ 20 мая 2019

Использование fill_value:

df1['New Number'] = df1.add(df2, axis='columns', fill_value=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...