Python Pandas рассчитывает, используя скользящее временное окно - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть датафрейм, который выглядит следующим образом:

customerId Date         Amount_Spent
123        01/01/2018   500
456        01/01/2018   250
123        02/01/2018   300
456        02/01/2018   100

Я хочу подсчитать клиентов (отличных / не отличных), которые потратили более 200 в течение двух последовательных дней.

ИтакЯ ожидаю получить

customerId Date1        Date2         Total_Amount_Spent
123        01/01/2018   02/01/2018    800

Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 10 декабря 2018

Есть две проверки, одна проверка различий в днях, а другая проверка суммы всегда больше, чем 100, используя all, затем обе ситуации удовлетворены, мы выбираем идентификатор.

s=df.groupby('customerId').agg({'Date':lambda x : (x.iloc[0]-x.iloc[-1]).days==-1,'Amount_Spent':lambda x : (x>100).all()}).all(1)
newdf=df.loc[df.customerId.isin(s.index),]
newdf
Out[1242]:
   customerId       Date  Amount_Spent
0         123 2018-01-01           500
2         123 2018-01-02           300

Повторное использование groupby + agg для получения необходимого формата

newdf.groupby('customerId').agg({'Date':['first','last'],'Amount_Spent':'sum'})
Out[1244]: 
                 Date            Amount_Spent
                first       last          sum
customerId                                   
123        2018-01-01 2018-01-02          800
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...