Как заполнить Нуль для дубликатов записей в Пандах - PullRequest
0 голосов
/ 24 мая 2019

У меня есть df, который содержит снимки для статуса заявки JIRA, df содержит несколько снимков для этих заявок, поэтому есть некоторые дубликаты.Я хочу заполнить нулевые значения (если идентификатор имеет значение Null в одной точке)) в предыдущих снимках с текущим последним статусом заявки.

Например:

snapshot  id  status    date
week1     111  Null     2019-10-10
week2     111  Null     2019-10-17
week3     111  Analysis 2019-10-23

Я хочу изменить статус недели 1 и недели 2 на анализ.

Другой сценарий:

snapshot  id  status    date
week1     111  Null     2019-10-10
week2     111  Triage   2019-10-17
week3     111  Analysis 2019-10-23

week2 - Triage, но последняя неделя3 - это Analysis, df все равно следует изменить на:

snapshot  id   status   date 
week1     111  Analysis 2019-10-10
week2     111  Analysis 2019-10-17
week3     111  Analysis 2019-10-23

Ответы [ 2 ]

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

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

for _, sub in df.groupby('id'):
    if len(sub.loc[sub['status'].str.match('Null')]) > 0:   # at least one Null in group
        dat = sub['date'].max()                             # max date in group
        status = sub.loc[sub['date']==dat, 'status'].iat[0] # last status
        if status != 'Null':                                # caution...
            df.loc[sub.index, 'status'] = status

Это работает так же, если столбец date имеет строку типа или дату.

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

Вы можете присвоить NaN всем строкам, у которых нет даты max, затем использовать от backfill (bfill) до fillna

m = df['date'].eq(df.groupby('id')['date'].transform('max'))

df['status'] = np.where(m, df['status'], np.NaN)
df['status'] = df['status'].bfill()

  snapshot   id    status       date
0    week1  111  Analysis 2019-10-10
1    week2  111  Analysis 2019-10-17
2    week3  111  Analysis 2019-10-23

Примечание
Если у вашего столбца date еще нет типа datetime, сначала преобразуйте его:

df['date'] = pd.to_datetime(df['date'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...