обновить отсутствующие значения в фрейме данных из другого фрейма данных - PullRequest
0 голосов
/ 08 мая 2019

У меня есть датафрейм с пропущенными значениями. мне нужно обновить отсутствующие значения двумя способами. 1. с того же кадра данных на основе последней даты и идентификатора. 2. с другого кадра данных на основе даты и идентификатора

df
id  date        name    location    type
11  08-05-2019  aim     ind         ss
12  08-05-2019  paul    uk          ee
11  08-04-2019  aim     ee
13  08-05-2019  tera    uk          jj
13  08-01-2019  tera                kk
15  08-09-2019          usa         ii
15  08-05-2019          uk          ii
13  08-05-2019  tera    uk

ожидаемый результат, основанный на заполнении нанов с того же кадра данных на основе идентификатора и последней даты

df1
id  date        name    location    type
11  08-05-2019  aim     ind         ss
12  08-05-2019  paul    uk          ee
11  08-04-2019  aim     ind         ss
13  08-05-2019  tera    uk          jj
13  08-01-2019  tera    uk          kk
15  08-09-2019          usa         ii
15  08-05-2019          uk          ii
13  08-05-2019  tera    uk          jj

В df1 мне нужно заменить только значения nan из фрейма данных y на основе столбца даты и идентификатора.

y
id  date        name    location    type    rev
11  08-05-2019  aim     ind         ss      yes
12  08-05-2019  paul    uk          ee      no
11  08-04-2019  aim     ind         ee      yes
13  08-05-2019  tera    uk          jj      yes
13  08-01-2019  tera    uk          kk      yes
15  08-09-2019  sam     usa         ii      no
15  08-05-2019  jim     uk          ii      no
13  08-05-2019  tera    uk          kk      no
14  09-05-2019  tiya    uk          kk      yes
15  10-05-2019  tiya    ind         kk      yes

Я пробовал этот код для 2-го варианта, но не работал точно.

y.set_index(['id','date']).combine_first(df1.set_index(['id','date'])).reset_index()

и

df, y = df.set_index('id','date'), y.set_index('id','date')
df.update(y)
df.reset_index(inplace=True)

но при получении многоиндексной ошибки

Я не смог получить df1 от df, поэтому напрямую пытался обновить df с помощью y

окончательный ожидаемый результат -

id  date        name    location    type
11  08-05-2019  aim     ind         ss
12  08-05-2019  paul    uk          ee
11  08-04-2019  aim     ind         ee
13  08-05-2019  tera    uk          jj
13  08-01-2019  tera    uk          kk
15  08-09-2019  sam     usa         ii
15  08-05-2019  jim     uk          ii
13  08-05-2019  tera    uk          kk

1 Ответ

0 голосов
/ 08 мая 2019

Вы только что получили имена данных в обратном порядке. Следующее должно работать

df1.set_index(['id','date']).combine_first(y[df1.columns].set_index(['id','date'])).reset_index()
...