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