在正确的日期组织一次多索引

时间:2018-07-13 21:05:26

标签: python pandas pivot-table

假设我有一个电子商务,我想每月分析给定一天的总订单。我想为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

这真的很接近,但是唯一的问题是每个日期都相差一个。有没有办法将其移动一个?

0 个答案:

没有答案