Слияние фреймов данных по индексу с пандами
У меня есть два кадра данных, и у каждого есть два столбца индекса. Я хотел бы объединить их. Например, первый кадр данных выглядит следующим образом:
V1
A 1/1/2012 12
2/1/2012 14
B 1/1/2012 15
2/1/2012 8
C 1/1/2012 17
2/1/2012 9
Второй кадр данных выглядит следующим образом:
V2
A 1/1/2012 15
3/1/2012 21
B 1/1/2012 24
2/1/2012 9
D 1/1/2012 7
2/1/2012 16
и в результате я хотел бы получить следующее:
V1 V2
A 1/1/2012 12 15
2/1/2012 14 N/A
3/1/2012 N/A 21
B 1/1/2012 15 24
2/1/2012 8 9
C 1/1/2012 7 N/A
2/1/2012 16 N/A
D 1/1/2012 N/A 7
2/1/2012 N/A 16
Я пробовал несколько версий с использованием методов pd.merge
и .join
, но, похоже, ничего не работает. У вас есть какие-нибудь предложения?
Ответы
Ответ 1
Вы должны иметь возможность использовать join
, который по умолчанию присоединяется к индексу. Учитывая желаемый результат, вы должны использовать outer
как тип соединения.
>>> df1.join(df2, how='outer')
V1 V2
A 1/1/2012 12 15
2/1/2012 14 NaN
3/1/2012 NaN 21
B 1/1/2012 15 24
2/1/2012 8 9
C 1/1/2012 17 NaN
2/1/2012 9 NaN
D 1/1/2012 NaN 7
2/1/2012 NaN 16
Подпись: _.join(other, on = None, how = 'left', lsuffix = '', rsuffix = '', sort = False) строка документации: Объединение столбцов с другим DataFrame либо по индексу, либо по ключу колонка. Эффективно Присоединяйте несколько объектов DataFrame по индексу за раз передача списка.
Ответ 2
Вы можете сделать это с помощью merge
:
df_merged = df1.merge(df2, how='outer', left_index=True, right_index=True)
Аргумент ключевого слова how='outer'
хранит все индексы из обоих фреймов, заполняя отсутствующие индексы с помощью NaN
. Аргументы left_index
и right_index
имеют слияние с индексами. Если вы получите все NaN
в столбце после выполнения слияния, другим шагом по устранению неполадок является проверка того, что ваши индексы имеют одинаковый dtypes
.
Приведенный выше код merge
создает для меня следующий вывод:
V1 V2
A 2012-01-01 12.0 15.0
2012-02-01 14.0 NaN
2012-03-01 NaN 21.0
B 2012-01-01 15.0 24.0
2012-02-01 8.0 9.0
C 2012-01-01 17.0 NaN
2012-02-01 9.0 NaN
D 2012-01-01 NaN 7.0
2012-02-01 NaN 16.0