假设我有一个电子商务,我想每月分析给定一天的总订单。我想为3月份创建一个像数据框这样的日历。
我尝试通过以下方式从原始数据框中创建数据透视表:
df1 = df
df1['Week'] = df1.order.map(lambda x: x.strftime('%W'))
df1['Day'] = df.groupby(level=0)['order'].max().apply(lambda x: x.strftime('%a-%D'))
df1 = df1.groupby(['cohort','cohort_group']).agg({'order_id': ['count']})
df1
但是由于某些原因,日期不合时宜。
Orders
Week Day
01 Fri-10/03/16 195
Sat-10/04/16 186
Sun-10/05/16 244
Thu-10/02/16 169
Wed-10/01/16 181
02 Fri-10/10/16 210
Mon-10/06/16 161
Sat-10/11/16 202
Sun-10/12/16 259
Thu-10/09/16 194
Tue-10/07/16 168
Wed-10/08/16 169
...
以此类推。
我打算在数据透视表上使用.unstack复制3月的日历,但是由于Day的顺序混乱,因此格式不正确。
是否有办法在将其汇总成多索引后的几天进行重组,或者有更好的方法来创建数据透视表?
所以我接受了Alollz的建议,并使用dt.dayofweek而不是strftime格式化了[day]:
df1 = df
df1['Week'] = df1.order.map(lambda x: x.strftime('%W'))
df1['Day'] = df1.order.dt.dayofweek + 1
df1 = df1.groupby(['Week','Day']).agg({'dorder_id': ['count']})
df1unstack = df1.unstack()
它也可以分解成我想要的东西。
Day 1 2 3 4 5 6 7
Week
39 NaN NaN 181.0 169.0 195.0 186.0 244.0
40 161.0 168.0 169.0 194.0 210.0 202.0 259.0
41 169.0 172.0 194.0 167.0 183.0 251.0 296.0
42 182.0 163.0 163.0 161.0 239.0 209.0 320.0
43 172.0 210.0 179.0 215.0 NaN NaN NaN
这真的很接近,但是唯一的问题是每个日期都相差一个。有没有办法将其移动一个?