Pandas 有没有办法填写顺序日历中缺少的销售记录行

Pandas 有没有办法填写顺序日历中缺少的销售记录行,pandas,dataframe,data-analysis,Pandas,Dataframe,Data Analysis,各位: 以下是我关于熊猫包的问题,如何填写顺序日历中缺失的行 背景: 该表是我的销售记录数据集的一个示例。如你所知,有些产品销售不佳。因此,我们可以发现,在201003-201005期间,“A类和产品种子”缺少一些记录。因此,我很难计算分类产品中各组的“顺序增长率%” 最初,我想使用“groupby+apply”找出每个组丢失的时段,然后我可以恢复并“pct_更改”它们。虽然它不起作用。我不知道根本原因在哪里 如果你知道怎么做,你能和我们分享你的意见吗?谢谢 数据集: 日历: 结果: 添加

各位:

以下是我关于熊猫包的问题,如何填写顺序日历中缺失的行

背景:

该表是我的销售记录数据集的一个示例。如你所知,有些产品销售不佳。因此,我们可以发现,在201003-201005期间,“A类和产品种子”缺少一些记录。因此,我很难计算分类产品中各组的“顺序增长率%”

最初,我想使用“groupby+apply”找出每个组丢失的时段,然后我可以恢复并“pct_更改”它们。虽然它不起作用。我不知道根本原因在哪里

如果你知道怎么做,你能和我们分享你的意见吗?谢谢

数据集:

日历:

结果:

添加一些信息:

我的日历是由“月/季度/半年度/年度”组成的,而不是日期-时间格式。例如,2010Q1或2019H1。因此,我希望有一种方法可以通过我的特定日历来填充缺少的行


换句话说,我想做的第一步是计算我的特定日历之间缺少哪些行。第二步是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)构建所有可能的组合
您应该为您的项目进行设置,我认为最好的选择是取消堆叠,而不是重新堆叠,然后重新索引所有日期。。。现在每个产品都有一个列,可以按列计算增长率(或任何其他统计数据)。谢谢你的帮助!