我有一系列与此表类似的交易:
ID Customer Date Amount
1 A 6/12/2018 33,223.00
2 A 9/20/2018 635.00
3 B 8/3/2018 8,643.00
4 B 8/30/2018 1,231.00
5 C 5/29/2018 7,522.00
但是我需要获取最近六个月(截至今天)的平均金额
我正在使用
df.groupby('Customer').resample('W')['Amount'].sum()
得到这样的东西:
CustomerCode PayDate
A 2018-05-21 268
2018-05-28 0.00
2018-06-11 0.00
2018-06-18 472,657
2018-06-25 0.00
但是,使用此解决方案,我只能得到客户有付款的日期范围。我需要为每个客户延长周数,以便获得六个月的全部范围(以周为单位)。在此示例中,我需要从'2018-04-05'的那一周(恰好是今天的六个月前)到今天的一周(今天是0,因为没有金额)为客户A获取< / p>
答案 0 :(得分:0)
重采样非常灵活。要获得6个月而不是每周的总和,您目前所需要的是:
df.groupby('Customer').resample('6M')['Amount'].sum()
按月末分组;月开始时间为'6MS'
。
有关可用频率的更多文档可在此处找到: http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases
答案 1 :(得分:0)
这是我找到的解决方案。首先,我创建所需的日期(过去六个月,但以周为单位)
$ awk -F"#" '{ for (i = 2; i <= NF; i+=2) { print $i } }' <<< "something#ABC#else something#DEF#else"
ABC
DEF
然后我使用带有日期的客户产品创建一个多索引。
dates = pd.date_range(datetime.date.today() - datetime.timedelta(6*365/12),
pd.datetime.today(),
freq='W')
然后,我使用新创建的多索引对df重新编制索引,最后,我用零填充缺失值。
multi_index = pd.MultiIndex.from_product([pd.Index(df['Customer'].unique()),
dates],
names=('Customer', 'Date'))