Как объединить два фрейма данных pandas в индексе, но заполнить пропущенные значения

У меня есть два фрейма данных

df

  x
0 1
1 1
2 1
3 1
4 1

df1

  y
1 1
3 1

И я хочу объединить их в индексе, но при этом сохранить индексы, которых нет в df1. Это мой желаемый результат

  x  y
0 1  0
1 1  1
2 1  0
3 1  1
4 1  0

Я пробовал слияние по индексу, вот так

pd.merge(df, df1s, left_index=True, right_index=True)

Но это избавляет от значений индекса не в df1. Например:

  x y
1 1 1
3 1 1

Это не то, чего я хочу. Я пробовал и outer, и inner присоединиться, но безрезультатно. Я также пытался прочитать другие вопросы о слиянии панд, но, похоже, не могу понять здесь мой конкретный случай. Извиняюсь, если вопросы о слиянии избыточны, но опять же, я не могу понять, как слить так, как мне хотелось бы в этом конкретном сценарии. Спасибо!

Я бы порекомендовал join при выполнении left merge на index: вы можете join и заполнить нас нулем: df.join(df1).fillna(0)

David Erickson 24.12.2020 00:55

В вашем коде отсутствует параметр how: pd.merge(df, df1, left_index=True, right_index=True, how = "left").fillna(0)

sammywemmy 24.12.2020 00:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
5 034
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте объединить строки и заполнить NaN 0

pd.concat([df,df1], axis=1).fillna(0)



  x    y
0  1  0.0
1  1  1.0
2  1  0.0
3  1  1.0
4  1  0.0

Нет необходимости в каком-либо сложном слиянии, вы можете просто скопировать столбец напрямую, заполнить NaN и установить dtype. Вы можете сделать это напрямую или с помощью pd.concat():

pd.concat([df1, df2], axis=1).fillna(0).astype(int)

   x  y
0  1  0
1  1  1
2  1  0
3  1  1
4  1  0

Чем это отличается от другого ответа, кроме того факта, что вы добавили astype(int)? Если кто-то уже опубликовал решение, лучше не публиковать точно такое же решение.

David Erickson 24.12.2020 01:56

Когда я начал заполнять свой ответ, комментариев не было, поэтому я не заметил, что кто-то еще придумал подобное решение. При этом это по-прежнему единственное решение, которое дает желаемый результат, заданный в исходном вопросе.

Paul Mundt 24.12.2020 02:01

Другие вопросы по теме