Прежде всего, я сделаю пример результата, который я хочу получить. Изначально у меня есть два DataFrames с разными индексами столбцов и индексами строк и, в конечном итоге, с разными номерами строк и столбцов (даже если в приведенном ниже примере оба 3x3):
Dataframe1 | Dataframe2
A B C | B D F
A x x x | A y y y
D x x x | B y y y
E x x x | E y y y
И я хочу следующий результат:
Result
A B C D F
A x y x y y
B - y - y y
D x x x - -
E x y x y y
Обратите внимание, что решение имеет следующие характеристики:
dataframe1
, так и dataframe2
dataframe2
обновляет dataframe1
(например, в позициях [BA] и [BE] результирующего фрейма данных, где в тех же позициях в dataframe1
было x
, теперь есть y
)-
), вставляется значение по умолчанию (например, NaN
)Мои вопросы:
Спасибо.
попробуй это:
data1 = {'A': {'A': 'x', 'D': 'x', 'E': 'x'},
'B': {'A': 'x', 'D': 'x', 'E': 'x'},
'C': {'A': 'x', 'D': 'x', 'E': 'x'}}
df1 = pd.DataFrame(data1)
print(df1)
>>>
A B C
A x x x
D x x x
E x x x
data2 = {'B': {'A': 'y', 'B': 'y', 'E': 'y'},
'D': {'A': 'y', 'B': 'y', 'E': 'y'},
'F': {'A': 'y', 'B': 'y', 'E': 'y'}}
df2 = pd.DataFrame(data2)
print(df2)
>>>
B D F
A y y y
B y y y
E y y y
res = df1.combine_first(df2)
print(res)
>>>
A B C D F
A x y x y y
B NaN y NaN y y
D x x x NaN NaN
E x y x y y
попробуй другой:
cols = df1.columns.append(df2.columns).unique().sort_values()
idx = df1.index.append(df2.index).unique().sort_values()
res = df1.reindex(index=idx, columns=cols)
res.update(df2)
print(res)
>>>
A B C D F
A x y x y y
B NaN y NaN y y
D x x x NaN NaN
E x y x y y
[ПОПРОБУЙТЕ ЭТО] Я пробовал, но не получилось. Я заметил, что если вы используете: df1.combine_first(df2), он сохраняет значения df1, а если вы делаете наоборот (df2.combine_first(df1)) он обновляет df1 с df2. Это работает таким образом, так что спасибо!