即使没有数据填充它们,也要在最终的GroupBy中保留空的bin / bucket

时间:2018-06-14 05:16:51

标签: python pandas dataframe pandas-groupby

我已成功删除了我的数据:

bins = [-np.inf,0,10000,20000,40000,60000,80000,100000,np.inf]  # include infinity value as the endpoint to the bins
labels = ['0','10K', '20K','40K','60K', '80K','100K','> 100K']
df_Done = df[
                (df['state'].str.contains('Done'))
                ][['Year_Month','rfq_qty_CAD_Equiv']].copy()
display(df_Done.head(5))

Year_Month  rfq_qty_CAD_Equiv
2018-05     259,774
2018-05     259,774
2018-05     363,684
2018-05     3,896,610
2018-05     666,340

df_Done.info()
Year_Month           700 non-null object
rfq_qty_CAD_Equiv    700 non-null float64
Bucket               700 non-null category

df_Done['Bucket'] = pd.cut(df_Done['rfq_qty_CAD_Equiv'], bins=bins, labels=labels)
display(df_Done.groupby(['Year_Month','Bucket'], as_index=False)['Bucket'].size())

从一个月到一个月,一些水桶可能没有交易,在这种情况下,我希望桶线显示为零。在下面的结果中,2017-11没有10K桶(想要看10K和0)。有没有办法插入垃圾桶/桶,即使没有交易来填充这些桶?

还有一种方法可以输出结果而不是文本格式但是网格格式?

enter image description here

1 个答案:

答案 0 :(得分:1)

reindex创建的新MultiIndex使用from_product,按cat.categories分类:

df = df_Done.groupby(['Year_Month','Bucket'], as_index=False)['Bucket'].size()

mux = pd.MultiIndex.from_product([df_Done['Year_Month'].unique(),
                                  df_Done['Bucket'].cat.categories])
df = df.reindex(mux, fill_value=0)
print (df)
2018-05  0         0
         10K       0
         20K       0
         40K       0
         60K       0
         80K       0
         100K      0
         > 100K    5
dtype: int64