Заполняйте NA вперед или назад, если значения в других столбцах совпадают - PullRequest
0 голосов
/ 28 августа 2018

Данный пример:

import pandas as pd
df = pd.DataFrame({
    "date": ["20180724", "20180725", "20180731", "20180723", "20180731"],
    "identity": [None, "A123456789", None, None, None],
    "hid": [12345, 12345, 12345, 54321, 54321],
    "hospital": ["A", "A", "A", "B", "B"],
    "result": [70, None, 100, 90, 78]
})

Поскольку первые три строки имеют одинаковые hid и hospital, значения в identity также должны быть идентичными. Что касается двух других строк, они также имеют одинаковые hid и hospital, но не было предоставлено никаких известных identity, поэтому значения в identity должны отсутствовать. Другими словами, желаемый результат:

       date    identity    hid hospital  result
0  20180724  A123456789  12345        A    70.0
1  20180725  A123456789  12345        A     NaN
2  20180731  A123456789  12345        A   100.0
3  20180723        None  54321        B    90.0
4  20180731        None  54321        B    78.0

Я могу просмотреть все комбинации hid s и hospital s, например for hid, hospital in df[["hid", "hospital"]].drop_duplicates().itertuples(index=False), но я не знаю, что делать дальше.

1 Ответ

0 голосов
/ 28 августа 2018

Используйте groupby и apply в сочетании с ffill и bfill:

df['identity'] = df.groupby(['hid', 'hospital'])['identity'].apply(lambda x: x.ffill().bfill())

Это заполнит NaN вперед и назад при разделении значений для указанных групп.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...