我有一个数据透视表,我按照年份和月份从带有时间戳对象的pandas数据帧列中对索引进行排序。除了一个细节之外,这对我需要的东西很有用。如果特定月/年没有条目,则不会填充数据透视表中的特定行。
我需要它显示为所有条目的0并且不会跳过这几个月。我怎么能做到这一点?
可在此处找到一些示例数据:http://www.filedropper.com/temp
我必须生成数据透视表的Curent代码如下。不幸的是,我不知道分享结果数据的有效方法,但是2016年的月份没有显示索引和列
data2['MonthDateBuild']=data2.DateBuild.dt.month
data2['YearDateBuild']=data2.DateBuild.dt.year
data2['MonthDateOpen']=data2.DateOpen.dt.month
data2['YearDateOpen']=data2.DateOpen.dt.year
pd.pivot_table(data2,index=['YearDateBuild','MonthDateBuild'],values=['Quantity'],columns=['YearDateOpen','MonthDateOpen'])
答案 0 :(得分:1)
这符合您的期望吗?如果要填充,请使用.fillna
。
pv = pd.pivot_table(data2,index=pd.Grouper(key='DateBuild', freq='M'),
values='Quantity',
columns=pd.Grouper(key='DateOpen', freq='M'))
pv.reindex(index=pd.date_range(pv.index.min(), pv.index.max(), freq='M'),
columns=pd.date_range(pv.columns.min(), pv.columns.max(), freq='M'))
# 2013-05-31 2013-06-30 2013-07-31 2013-08-31 ... \
# 2012-06-30 NaN NaN NaN NaN ...
# 2012-07-31 NaN NaN NaN NaN ...
# 2012-08-31 NaN NaN NaN NaN ...
# 2012-09-30 NaN NaN NaN NaN ...
# ... ... ... ... ... ...
# 2016-02-29 NaN NaN NaN NaN ...
# 2016-03-31 NaN NaN NaN NaN ...
# 2016-04-30 NaN NaN NaN NaN ...
# 2016-05-31 NaN NaN NaN NaN ...
#
# 2016-05-31 2016-06-30 2016-07-31 2016-08-31
# 2012-06-30 NaN NaN NaN NaN
# 2012-07-31 NaN NaN NaN NaN
# 2012-08-31 NaN NaN NaN NaN
# 2012-09-30 NaN NaN NaN NaN
# ... ... ... ... ...
# 2016-02-29 NaN NaN NaN NaN
# 2016-03-31 NaN NaN NaN NaN
# 2016-04-30 NaN NaN NaN NaN
# 2016-05-31 NaN NaN NaN 1
#
# [48 rows x 40 columns]