首页 > 解决方案 > 使用 pivot_table 创建的边距存在 Period 数据类型的问题

问题描述

我有一个包含三列的大型(+10m 行)数据框:销售日期(dtype: datetime64[ns])、客户姓名和每位客户的销售额。销售日期包括表格中的日、月和年yyyy-mm-dd(即2019-04-19)。我发现了 pandasto_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如图所示(或者在我的情况下,我设置为 0 fill_value = 0)。我使用的功能:

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

当我不将日期转换为期间而是使用简单的年份(整数)时,边距计算正确,并且在数据透视输出表的最后一行中没有出现 NaN。

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

标签: pythonpandasdataframe

解决方案


推荐阅读