Как извлечь, указав дату в pandas - PullRequest
2 голосов
/ 04 августа 2020

У меня есть df, как после

customer  movement      date
A         buy      2019/5/4 
A        inquiry   2020/7/1
A        cancel    2020/8/1
B         buy      2019/6/1
B        cancel    2020/8/1

Я хотел бы сначала отследить каждого клиента movement до cancel

, группируя по customer

A         buy      2019/5/4 
A        inquiry   2020/7/1
A        cancel    2020/8/1

Тогда я бы хотел получить cancel date

A        cancel    2020/8/1

А потом я хотел бы получить previous movement перед отменой in 1 year.

customer movement date
A        inquiry  2020/7/1
A        cancel   2020/8/1

После этого я хотел бы повторить в каждом customers

Итак, мой желаемый результат такой, как показано ниже

customer movement date
A        inquiry  2020/7/1
A        cancel   2020/8/1
B        cancel   2020/8/1

Есть ли способ достичь этого? Это очень сложно, потому что я не мог справиться с такой процедурой ..

Спасибо

1 Ответ

2 голосов
/ 04 августа 2020

Сначала преобразовать столбец в дату и время и создать серию только с отфильтрованными cancel строками по DataFrame.set_index:

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

s = df[df['movement'].eq('cancel')].set_index('customer')['date']

Затем сопоставление по Series.map лет вычитается на 1 год и фильтруется для меньших значений столбца date по Series.lt в boolean indexing:

df = df[df['customer'].map(s.sub(pd.DateOffset(years=1))).lt(df['date'])]
print (df)
  customer movement       date
1        A  inquiry 2020-07-01
2        A   cancel 2020-08-01
4        B   cancel 2020-08-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...