Подтвердить что ты не робот

Объедините два кадры данных python pandas разной длины, но сохраните все строки в кадре выходных данных

У меня есть следующая проблема: у меня есть два фрейма данных pandas разной длины, содержащие несколько строк и столбцов, которые имеют общие значения, а некоторые - разные, например:

df1:                                 df2:

      Column1  Column2  Column3           ColumnA  ColumnB ColumnC
    0    a        x        x            0    c        y       y
    1    c        x        x            1    e        z       z
    2    e        x        x            2    a        s       s
    3    d        x        x            3    d        f       f
    4    h        x        x
    5    k        x        x            

Теперь я хочу объединить два фрейма данных, чтобы при одинаковом значении ColumnA и Column1 строки из df2 добавлялись к соответствующей строке в df1, например так:

df1:
    Column1  Column2  Column3  ColumnB  ColumnC
  0    a        x        x        s        s
  1    c        x        x        y        y
  2    e        x        x        z        z
  3    d        x        x        f        f
  4    h        x        x        NaN      NaN
  5    k        x        x        NaN      NaN

Я знаю, что слияние выполнимо через

df1.merge(df2,left_on='Column1', right_on='ColumnA')

но эта команда удаляет все строки, которые не совпадают в Column1 и ColumnA в обоих файлах. Вместо этого я хочу сохранить эти строки в df1 и просто назначить им NaN в столбцах, где другие строки имеют значение из df2, как показано выше. Есть ли плавный способ сделать это в пандах?

Заранее спасибо!

4b9b3361

Ответ 1

Вы можете прочитать документацию здесь: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

То, что вы ищете, это левое соединение. Опция по умолчанию - внутреннее соединение. Вы можете изменить это поведение, передав другой аргумент how:

df1.merge(df2,how='left', left_on='Column1', right_on='ColumnA')

Ответ 3

Вы можете просто использовать слияние с помощью on и list также

result = df1.merge(df2, on=['Column1'])

Для получения дополнительной информации следуйте ссылка