使用pivot_table创建的边距存在Period数据类型的问题

时间:2019-04-19 21:08:21

标签: python pandas dataframe

我有一个大的(+ 10m行)数据框,其中包含三列:销售日期(dtype:datetime64[ns]),客户名称和每位客户的销售额。销售日期包括yyyy-mm-dd格式的日期,月份和年份(即2019-04-19)。我发现了熊猫to_period函数,并且喜欢使用period[A-MAR] dtype。由于业务年度(三月结束)与日历年度有所不同,这正是我想要的。使用to_period功能,我可以将相应的销售日期分配给正确的业务年度,同时避免创建带有其他信息的新列。

我将日期列转换如下:

df_input['Date'] = pd.DatetimeIndex(df_input['Date']).to_period("A-MAR")

现在,当我使用pivot_table聚合数据并设置margins=True时,出现了一个特殊的问题。 aggfunc在输出表中返回正确的值。但是,最后一行的结果(由边距创建的总值)是错误的,因为显示了NaN(或者在我的情况下,当我设置fill_value = 0时为0)。我使用的功能:

df_output = df_input.pivot_table(index="Customer", 
     columns = "Date",
     values = "Sales",
     aggfunc ={"Sales": np.sum},
     fill_value = 0, 
     margins= True)

如果我不将日期转换为期间,而是使用简单的年份(整数),则可以正确计算边距,并且数据透视表输出表的最后一行中不会显示NaN。

我在整个互联网上进行了搜索,但找不到有效的解决方案。我想继续使用期间数据类型,只需要正确计算边距即可。我希望有人可以在这里帮助我。谢谢!

0 个答案:

没有答案