Удалить группы, если указана c дата, не указанная в столбце даты в Pandas - PullRequest
1 голос
/ 23 апреля 2020

С учетом следующего кадра данных:

  city district      date  price
0   bj       cy  2019/3/1    NaN
1   bj       cy  2019/4/1    6.0
2   sh       hp  2019/2/1    4.0
3   sh       hp  2019/3/1    4.0
4   bj       hd  2019/3/1    7.0
5   bj       hd  2019/4/1    NaN

Как можно удалить группы city и date, если у них нет записи 2019/4/1.

В этом случае группы sh и hp должны быть удалены, поскольку в нем есть данные только для 2019/2/1 и 2019/3/1.

Мой желаемый вывод будет выглядеть так:

  city district      date  price
0   bj       cy  2019/3/1    NaN
1   bj       cy  2019/4/1    6.0
2   bj       hd  2019/3/1    7.0
3   bj       hd  2019/4/1    NaN

Искреннее спасибо за вашу помощь.

1 Ответ

1 голос
/ 23 апреля 2020

Решение с DataFrameGroupBy.filter:

df['date'] = pd.to_datetime(df['date'])

f = lambda x: x['date'].eq('2019-04-01').any()
df = df.groupby(['city','district']).filter(f)
print (df)
  city district       date  price
0   bj       cy 2019-03-01    NaN
1   bj       cy 2019-04-01    6.0
4   bj       hd 2019-03-01    7.0
5   bj       hd 2019-04-01    NaN

Более быстрое решение с GroupBy.transform и GroupBy.any:

df = (df[df.assign(t = df['date'].eq('2019-04-01'))
           .groupby(['city','district'])['t'].transform('any')])
print (df)
  city district       date  price
0   bj       cy 2019-03-01    NaN
1   bj       cy 2019-04-01    6.0
4   bj       hd 2019-03-01    7.0
5   bj       hd 2019-04-01    NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...