Как группировать по неделям (начало в четверг), используя pandas? - PullRequest
1 голос
/ 25 марта 2020

У меня есть датафрейм с данными о количестве полученных пользователей за день. Фрейм данных:

users = {'Date':['13.02.2020', '15.02.2020', '19.02.2020', '20.02.2020', '23.02.2020', '26.02.2020'], 'Users_gain':['2', '1', '3', '1', '4', '5']}
df_users = pd.DataFrame(users)

Date    Users_gain
0   13.02.2020  2
1   15.02.2020  1
2   19.02.2020  3
3   20.02.2020  1
4   23.02.2020  4
5   26.02.2020  5

Мне нужно сгруппировать по неделям, где день начала - четверг. Поэтому результат должен выглядеть следующим образом:

Date    Users_gain
0   13.02.2020 - 19.02.2020 6
1   20.02.2020 - 26.02.2020 10

Буду признателен, если кто-нибудь сможет мне помочь с этим вопросом.

Это то, что я пытался. Но я не знаю, как изменить дату начала с воскресенья на четверг:

df_users.groupby(pd.Grouper(key='Date', freq='W')).sum()

1 Ответ

1 голос
/ 25 марта 2020

Сначала преобразуйте столбцы в числа и даты в to_datetime:

df_users['Users_gain'] = df_users['Users_gain'].astype(int)
df_users['Date'] = pd.to_datetime(df_users['Date'], format='%d.%m.%Y')

Затем агрегируйте в DataFrame.resample или с Grouper по дням Wednesday:

df_users = df_users.resample('W-Wed',on='Date')['Users_gain'].sum().reset_index()
#alternative
#df_users = df_users.groupby(pd.Grouper(key='Date', freq='W-Wed')).sum().reset_index()

Последнее изменение формата даты и времени с вычитанием 6 дней и Series.dt.strftime:

s = (df_users['Date'] - pd.offsets.DateOffset(days=6)).dt.strftime('%d.%m.%Y-')
df_users['Date'] = s + df_users['Date'].dt.strftime('%d.%m.%Y')

print (df_users)
                    Date  Users_gain
0  13.02.2020-19.02.2020           6
1  20.02.2020-26.02.2020          10
...