熊猫:添加缺失月份的数据

时间:2013-06-27 12:53:19

标签: python pandas

我有一个按月计算的客户销售信息数据框,看起来像这样,有多个客户和不同的月份和支出:

      customer_id month_year      sales
   0        12    2012-05          2.58   
   1        12    2011-07         33.14  
   2        12    2011-11        182.06   
   3        12    2012-03        155.32   
   4        12    2012-01         71.24 

正如您所看到的,对于每个客户来说,很多月份都缺失了。我想为month_year范围内的所有月份为每个客户添加额外的行,其中sales = 0.0。

有人可以建议最好的方法吗?

2 个答案:

答案 0 :(得分:6)

像这样的东西;请注意,未定义填充customer_id(因为您可能在groupby或其他内容中使用此内容)。

最后你可能需要reset_index

In [130]: df2 = df.set_index('month_year')

In [131]: df2 = df2.sort_index()

In [132]: df2
Out[132]: 
            customer_id   sales
month_year                     
2011-07              12   33.14
2011-11              12  182.06
2012-01              12   71.24
2012-03              12  155.32
2012-05              12    2.58

In [133]: df2.reindex(pd.period_range(df2.index[0],df2.index[-1],freq='M'))
Out[133]: 
         customer_id   sales
2011-07           12   33.14
2011-08          NaN     NaN
2011-09          NaN     NaN
2011-10          NaN     NaN
2011-11           12  182.06
2011-12          NaN     NaN
2012-01           12   71.24
2012-02          NaN     NaN
2012-03           12  155.32
2012-04          NaN     NaN
2012-05           12    2.58

In [135]: df2['customer_id'] = 12

In [136]: df2.fillna(0.0)
Out[136]: 
         customer_id   sales
2011-07           12   33.14
2011-08           12    0.00
2011-09           12    0.00
2011-10           12    0.00
2011-11           12  182.06
2011-12           12    0.00
2012-01           12   71.24
2012-02           12    0.00
2012-03           12  155.32
2012-04           12    0.00
2012-05           12    2.58

答案 1 :(得分:1)

我找到了一种不同的方法来填充缺失的月份(它们将用 NaN 填充),同时还要考虑多个可能的客户。

df = df.set_index(['month_year', 'customer_id'])['sales'].unstack().unstack().reset_index()
df = df.rename(columns={0:'sales'})

虽然这绝对不优雅,但它完成了工作。