【发布时间】:2022-01-18 09:00:30
【问题描述】:
我有以下数据集。我需要获取每个月的一周开始(星期一)和周末(星期日),结果列应该根据分组(国家和产品)获得每周数据的总和
SAMPLE INPUT
all_dates country product result
10/22/2021 A Broadband 13
10/23/2021 A Broadband 8
10/24/2021 A Broadband 7
10/25/2021 A Broadband 36
8/4/2021 C TV 2
8/7/2021 C TV 1
EXPECTED OUTPUT
week_start week_end product country result
10/4/2021 10/10/2021 Broadband A 0
10/11/2021 10/17/2021 Broadband A 0
10/18/2021 10/24/2021 Broadband A 28
10/25/2021 10/31/2021 Broadband A 36
8/2/2021 8/8/2021 TV C 3
8/9/2021 8/15/2021 TV C 0
8/16/2021 8/22/2021 TV C 0
8/23/2021 8/29/2021 TV C 0
8/30/2021 9/5/2021 TV C 0
我尝试了以下逻辑;但我无法得到预期的结果
**first try**
df1 = (df.set_index('all_dates').groupby(['product','country'])['result'].resample('W-MON').sum().reset_index().rename(columns={'all_dates':'week_start'}))
df1.insert(3, 'week_enddate', df1['week_startdate'] + pd.offsets.DateOffset(days=6))
**second try**
weekly = df.groupby(by=['product','country', pd.Grouper(key='all_dates', freq='W')])['result'].sum().reset_index()
weekly = weekly.rename({'all_dates': 'week_start'}, axis=1)
weekly['week_end'] = weekly['week_start'] + pd.offsets.Week(weekday=5)
**third try**
df['start'] = df['all_dates'] - pd.offsets.Week(weekday=6)
df['end'] = df['start'] + pd.offsets.Week(weekday=5)
df3 =df.groupby(['start','end','product','country'])['metric_result'].sum().reset_index()
df3
有没有其他方法可以做到这一点。
【问题讨论】:
标签: python python-3.x pandas dataframe pandas-groupby