Pandas 有没有办法填写顺序日历中缺少的销售记录行
各位: 以下是我关于熊猫包的问题,如何填写顺序日历中缺失的行 背景: 该表是我的销售记录数据集的一个示例。如你所知,有些产品销售不佳。因此,我们可以发现,在201003-201005期间,“A类和产品种子”缺少一些记录。因此,我很难计算分类产品中各组的“顺序增长率%” 最初,我想使用“groupby+apply”找出每个组丢失的时段,然后我可以恢复并“pct_更改”它们。虽然它不起作用。我不知道根本原因在哪里 如果你知道怎么做,你能和我们分享你的意见吗?谢谢 数据集: 日历: 结果: 添加一些信息: 我的日历是由“月/季度/半年度/年度”组成的,而不是日期-时间格式。例如,2010Q1或2019H1。因此,我希望有一种方法可以通过我的特定日历来填充缺少的行Pandas 有没有办法填写顺序日历中缺少的销售记录行,pandas,dataframe,data-analysis,Pandas,Dataframe,Data Analysis,各位: 以下是我关于熊猫包的问题,如何填写顺序日历中缺失的行 背景: 该表是我的销售记录数据集的一个示例。如你所知,有些产品销售不佳。因此,我们可以发现,在201003-201005期间,“A类和产品种子”缺少一些记录。因此,我很难计算分类产品中各组的“顺序增长率%” 最初,我想使用“groupby+apply”找出每个组丢失的时段,然后我可以恢复并“pct_更改”它们。虽然它不起作用。我不知道根本原因在哪里 如果你知道怎么做,你能和我们分享你的意见吗?谢谢 数据集: 日历: 结果: 添加
换句话说,我想做的第一步是计算我的特定日历之间缺少哪些行。第二步是python可以使用分类和产品信息插入缺少的行。谢谢。因此,根据您对数据的掌握情况,可以通过多种方式有效地实现这一点。我要指出两点 首先是数据:
df = pd.DataFrame(
{'Month': [201001, 201002, 201006, 201007, 201008, 201001, 201002, 201007, 201008],
'Category': ['A'] * 9,
'Product': ['seed'] * 5 + ['flower'] * 4,
'Sales': [200, 332, 799, 122, 994, 799, 122, 994, 100]}
).set_index(['Month', 'Category', 'Product'])
重塑df
只有当所有可能的日期在df中至少出现一次时,这才有效
df = df.unstack(['Category', 'Product']).fillna(0).stack(['Category', 'Product'])
print(df.reset_index())
输出
Month Category Product Sales
0 201001 A flower 799.0
1 201001 A seed 200.0
2 201002 A flower 122.0
3 201002 A seed 332.0
4 201006 A flower 0.0
5 201006 A seed 799.0
6 201007 A flower 994.0
7 201007 A seed 122.0
8 201008 A flower 100.0
9 201008 A seed 994.0
Month Category Product Sales
0 201001 A seed 200
1 201001 A flower 799
2 201002 A seed 332
3 201002 A flower 122
4 201003 A seed 0
5 201003 A flower 0
6 201004 A seed 0
7 201004 A flower 0
8 201005 A seed 0
9 201005 A flower 0
10 201006 A seed 799
11 201006 A flower 0
12 201007 A seed 122
13 201007 A flower 994
如您所见,此示例数据不包括3-5个月
重新索引
如果我们用日期/产品的所有可能组合构建一个新索引,pandas将用
输出
Month Category Product Sales
0 201001 A flower 799.0
1 201001 A seed 200.0
2 201002 A flower 122.0
3 201002 A seed 332.0
4 201006 A flower 0.0
5 201006 A seed 799.0
6 201007 A flower 994.0
7 201007 A seed 122.0
8 201008 A flower 100.0
9 201008 A seed 994.0
Month Category Product Sales
0 201001 A seed 200
1 201001 A flower 799
2 201002 A seed 332
3 201002 A flower 122
4 201003 A seed 0
5 201003 A flower 0
6 201004 A seed 0
7 201004 A flower 0
8 201005 A seed 0
9 201005 A flower 0
10 201006 A seed 799
11 201006 A flower 0
12 201007 A seed 122
13 201007 A flower 994
这回答了你的问题吗?如果产品数量不多且所有日期至少出现一次,您可以
df.set_index(['month'、'category'、'product'])。unstack('categroy')。unstack('product')
我认为根据给定的帖子,它不适合我的数据集,因为我的日历是由“月/季度/半年度/年度”组成的代替日期时间格式。例如,2010Q1或2019H1。因此,我希望有一种方法可以通过我的特定日历来填充缺少的行。换句话说,我想做的第一步是计算我的特定日历之间缺少哪些行。第二步是python可以使用分类和产品信息插入缺少的行。谢谢。df.reindex
适用于任何索引,而不仅仅是日期,因此如果您df.set_索引(['Month'、'Category'、'Product'])
则使用newidx=pd.MultiIndex.from_Product([all_Month,all_cats,all_products])和df reindex(newidx)构建所有可能的组合
您应该为您的项目进行设置,我认为最好的选择是取消堆叠,而不是重新堆叠,然后重新索引所有日期。。。现在每个产品都有一个列,可以按列计算增长率(或任何其他统计数据)。谢谢你的帮助!