Конкатенация Pandas DataFrames с перекрывающимися индексами, но никогда не перекрывающимися значениями

1

У меня есть два DataFrames произвольной формы типа:

   A     B    C
0  A0   B0   C0
1  A1   B1   C1
2  A2   B2  NaN
3  A3  NaN  NaN
4  A4  NaN  NaN

а также

     A    B   C
2  NaN  NaN  C2
3  NaN   B3  C3
4  NaN   B4  C4
5   A5   B5  C5
6   A6   B6  C6

Два DataFrames имеют перекрывающиеся индексы. В случае перекрытия для данного столбца в одном кадре данных имеется non- NaN, а в другом - NaN. Как я могу объединить их так, чтобы я мог получить DataFrame со всеми значениями и без NaN:

    A    B    C
0  A0   B0   C0
1  A1   B1   C1
2  A2   B2   C2
3  A3   B3   C3
4  A4   B4   C4
5  A5   B5   C5
6  A6   B6   C6

Мое предлагаемое решение:

df3 = pd.concat([pd.concat([df1[col].dropna(), df2[col].dropna()]) for col in df1.columns], axis=1)

Однако в идеале я бы не работал по столбцам.

Теги:
pandas
dataframe
python-3.x
concatenation

2 ответа

3
Лучший ответ

Используйте combine_first:

df = df1.combine_first(df2)

print(df)
    A   B   C
0  A0  B0  C0
1  A1  B1  C1
2  A2  B2  C2
3  A3  B3  C3
4  A4  B4  C4
5  A5  B5  C5
6  A6  B6  C6
  • 0
    Это должен быть принятый ответ, так как combine_first был разработан для этой конкретной цели.
  • 0
    @ user3471881: Да .. !! Я тоже голосую за это. :)
1

использование df.fillna() и df.append() с dropna()

df1.fillna(df2).append(df2).dropna()

    A   B   C
0   A0  B0  C0
1   A1  B1  C1
2   A2  B2  C2
3   A3  B3  C3
4   A4  B4  C4
5   A5  B5  C5
6   A6  B6  C6

Ещё вопросы

Сообщество Overcoder
Наверх
Меню