Python Pandas рассчитывает, используя скользящее временное окно

1

У меня есть датафрейм, который выглядит так

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

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

Теги:
pandas
dataframe

1 ответ

1

Существует две проверки, одна проверка различий в днях, а другая проверка суммы всегда больше 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 снова, вы получите 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
  • 0
    @wb Можете ли вы дать некоторые объяснения тому, что делает ваш первый блок кода?
  • 0
    @ проверяет две разные даты независимо от того, продолжено это или нет, и проверьте, чтобы все значения в группе были больше 100
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню