将日期列按熊猫分组并按月划分

时间:2019-01-08 11:09:10

标签: pandas

我有一个数据框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 

有什么办法可以按月对日期进行分组?

注意:这是一个虚拟数据框,最终的每月列名可以采用其他适当的格式。

1 个答案:

答案 0 :(得分:3)

groupbyDataFrameGroupBy.resample一起使用并聚合sum,然后通过unstack重塑形状,并在必要时通过reindex0添加缺失的列,日期时间的最后更改格式: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