【问题标题】:How to group by week (start is Thursday) using pandas?如何使用熊猫按周分组(开始是星期四)?
【发布时间】:2020-07-05 16:19:27
【问题描述】:

我有一个数据框,其中包含每天获得的用户数量的数据。数据框:

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()

【问题讨论】:

  • 你试过什么?也只有日期,你在哪里找到日期。
  • df_users.groupby(pd.Grouper(key='Date', freq='W')).sum() - 这是我试过的。但我不知道如何将开始日期从星期日更改为星期四。

标签: python pandas date group-by


【解决方案1】:

首先通过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.resampleGrouper 按天聚合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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    相关资源
    最近更新 更多