【问题标题】:Pandas - Sum by week, using a date range in each recordPandas - 按周求和,使用每条记录中的日期范围
【发布时间】:2021-07-30 04:45:47
【问题描述】:

我有以下数据样本:

Hours Per Work Week Start Date End Date
10 2021-08-01 2021-08-31
20 2021-08-15 2021-09-15
40 2021-09-01 2021-09-30

我需要按周获得总分布,因此预期的数据框会是这样的:

total_hours
week
2021-08-01 30
2021-08-08 30
2021-08-15 30
2021-08-22 30
2021-08-29 30
2021-09-05 60
2021-09-12 60
2021-09-19 40
2021-09-26 40

我知道如何获取数周的索引:

all_dates = pd.date_range('2021-08-01', '2021-09-30', freq='W')

但是如何使用周数从适合我不确定的范围内的数据集中求和。

谢谢!!

【问题讨论】:

  • 查看 groupby 和 grouper。您需要执行以下操作:df.groupby(pd.Grouper(key="Start Date", freq="1W"))["hours"].sum()

标签: python pandas


【解决方案1】:

IIUC:

weeks = df.apply(lambda x: pd.date_range(x['Start Date'], x['End Date'], freq='W'),
                 axis='columns').explode().rename('week')

out = df[['Hours Per Work Week']].join(weeks).groupby('week').sum()
>>> weeks
            Hours Per Work Week
week
2021-08-01                   50
2021-08-08                   50
2021-08-15                   70
2021-08-22                   70
2021-08-29                   70
2021-09-05                   60
2021-09-12                   60
2021-09-19                   40
2021-09-26                   40

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2020-02-19
    • 2019-07-04
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多