【问题标题】:Padding python pivot tables with 0用 0 填充 python 数据透视表
【发布时间】:2016-01-29 23:20:36
【问题描述】:
我有一个数据透视表,它的日期索引范围从 01-01-2014 到 12-31-2015。我希望索引的范围从 01-01-2013 到 12-31-2016 并且不知道如何通过在我的 pandas 数据框中插入一行来修改基础数据集,并在我想用作我的索引的列中插入这些日期用于数据透视表。
有没有办法在不修改基础数据集的情况下完成此操作?
【问题讨论】:
标签:
python
python-2.7
pandas
dataframe
pivot-table
【解决方案1】:
我将在这里笼统地说,因为没有提供示例代码或数据。假设您的原始数据框名为df,并包含Date 和Sales 列。
我会尝试创建一个包含从 01-01-2014 到 12-31-2015 的所有日期的列表。让我们将此列表称为dates。我还将创建一个名为sales(即sales = [])的空列表。在此工作流结束时,sales 应包含来自dt['Sales'] 的数据以及不在数据框中的日期的占位符。在您的情况下,这些占位符将是 0。在我的回答中,数据框中的列名是大写的;列表名称以小写字母开头。
接下来,我将遍历dates 并检查每个日期是否在dt['Date'] 中。列表dates 的每次迭代都将被称为date(即date = dates[i])。
- 如果
date 在dt['Date'] 中,我会将该日期的Sales 数据附加到sales 中。您可以通过以下命令在数据框中找到日期:df['Date']==date。因此,要将相应的 Sales 数据附加到列表中,我将使用此命令 sales.append(df[df['Date']==date]['Sales']。
- 如果
date 不在dt['Date'] 中,我将在sales 中附加一个占位符(即sales.append(0)。
遍历列表中的所有日期后,我将使用dates 和sales 创建最终数据框。最终数据框应包含原始数据和原始数据中未包含的日期的占位符。