Агрегирование данных по датам - PullRequest
0 голосов
/ 08 марта 2019

У меня есть такой фрейм данных:

  Customer Id Start Date  End Date     Count  
  1403120020  2014-03-13  2014-03-17   38.0 
  1403120020  2014-03-18  2014-04-16  283.0
  1403120020  2014-04-17  2014-04-25  100.0 
  1403120020  2014-04-26  2014-05-15  50.0  
  1812040169  2018-12-07  2018-12-19  122.0
  1812040169  2018-12-19  2018-12-20   10.0  
  1812040169  2018-12-21  2019-01-18  365.0  

Здесь для одного клиента у меня есть несколько дат начала в течение определенного месяца, и одна из дат окончания этого месяца находится в следующем месяце.Я хочу, чтобы у клиента была одна начальная и одна конечная дата следующим образом с суммируемым счетом:

  Customer Id Start Date  End Date     Count   
  1403120020  2014-03-13  2014-04-16   321
  1403120020  2014-04-17  2014-05-15  150.0  
  1812040169  2018-12-07  2019-1-18    497 

1 Ответ

3 голосов
/ 08 марта 2019

Использование groupby.agg:

df = (df.groupby('Customer_Id').agg({'Start_Date':'first', 'End_Date':'last', 'Count':'sum'})
        .reset_index())

print(df)
   Customer_Id  Start_Date    End_Date  Count
0   1403120020  2014-03-13  2014-04-16  321.0
1   1812040169  2018-12-07  2019-01-18  497.0

РЕДАКТИРОВАТЬ:

df['grp'] = df['Start_Date'].dt.month
df = (df.groupby(['Customer_Id','grp'])
        .agg({'Start_Date':'first', 'End_Date':'last', 'Count':'sum'})
        .reset_index().drop('grp', axis=1))

print(df)
   Customer_Id Start_Date    End_Date  Count
0   1403120020 2014-03-13  2014-04-16  321.0
1   1403120020 2014-04-17  2014-05-15  150.0
2   1812040169 2018-12-07  2019-01-18  497.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...