Панды, объединяющие фреймы данных и перезаписывающие данные в исходном df - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь объединить два кадра данных панд, но не могу понять, как получить нужный мне результат. Вот примеры версий фреймов данных, на которые я смотрю:

df1 = pd.DataFrame([["09/10/2019",None],["10/10/2019",None], ["11/10/2019",6],
                    ["12/10/2019",5], ["13/10/2019",3], ["14/10/2019",3],
                    ["15/10/2019",5],
                    ["16/10/2019",None]], columns = ['Date', 'A'])

df2 = pd.DataFrame([["10/10/2019",3], ["11/10/2019",5], ["12/10/2019",6],
                    ["13/10/2019",1], ["14/10/2019",2], ["15/10/2019",4]],
                    columns = ['Date', 'A'])

Я проверил Панд, объединяющих 101 , но все еще не могу найти способ сделать это правильно. По сути, мне нужно использовать ту же графику, что и в руководстве:

enter image description here

т.е. я хочу сохранить данные из df1, которые выходят за пределы общегораздел ключей, но в общей области я хочу, чтобы данные df2 из столбца «А» перезаписывали данные из df1. Я даже не уверен, что merge является правильным инструментом для использования.

Я пытался использовать df1 = pd.merge(df1, df2, how='right', on='Date') с различными параметрами, но в большинстве случаев он создает два отдельных столбца - A_x и A_y на выходе.

Вот что я хочу получить в качестве конечного результата:

         Date    A
0  09/10/2019  NaN
1  10/10/2019  3.0
2  11/10/2019  5.0
3  12/10/2019  6.0
4  13/10/2019  1.0
5  14/10/2019  2.0
6  15/10/2019  4.0
7  16/10/2019  NaN

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

1 Ответ

1 голос
/ 17 октября 2019

вот способ использования combine_first:

df2.set_index('Date').combine_first(df1.set_index('Date')).reset_index()

Или reindex_like:

df2.set_index('Date').reindex_like(df1.set_index('Date')).reset_index()

         Date    A
0  09/10/2019  NaN
1  10/10/2019  3.0
2  11/10/2019  5.0
3  12/10/2019  6.0
4  13/10/2019  1.0
5  14/10/2019  2.0
6  15/10/2019  4.0
7  16/10/2019  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...