我有一个数据框df:
store date invoice_count
A 2018-04-03 2
A 2018-04-06 5
A 2018-06-15 5
B 2018-05-05 2
B 2018-04-09 5
C 2018-02-16 6
其中包含给定日期的商店的invoice_counts(未生成发票)。
我正在尝试将它们分组,以便为每个商店获得按月计的发票数。
以这种格式预期的最终数据帧:
store jan_18 feb_18 mar_18 apr_18 may_18 june_18
A 0 0 0 7 0 5
B 0 0 0 5 2 0
C 0 6 0 0 0 0
有什么办法可以按月对日期进行分组?
注意:这是一个虚拟数据框,最终的每月列名可以采用其他适当的格式。
答案 0 :(得分:3)
将groupby
与DataFrameGroupBy.resample
一起使用并聚合sum
,然后通过unstack
重塑形状,并在必要时通过reindex
用0
添加缺失的列,日期时间的最后更改格式:DatetimeIndex.strftime
:
df = (df.set_index('date')
.groupby('store')
.resample('m')['invoice_count']
.sum()
.unstack(fill_value=0))
df = df.reindex(columns=pd.date_range('2018-01-01', df.columns.max(), freq='m'), fill_value=0)
df.columns = df.columns.strftime('%b_%y')
print (df)
Jan_18 Feb_18 Mar_18 Apr_18 May_18 Jun_18
store
A 0 0 0 7 0 5
B 0 0 0 5 2 0
C 0 6 0 0 0 0