Python-将行添加到时间序列数据集

时间:2018-06-19 13:23:18

标签: python pandas

我有一个pandas数据框,其中包含零售销售数据,其中显示了每周售出产品的总数以及该周结束时剩余的库存。不幸的是,数据集仅在产品售出且库存变化时显示一行。

我想对数据集进行批量处理,以便每个星期都有一条线用于销售每种产品。我在下面显示了一个示例-如何完成?

原样:

Week Product Sold Stock
1    1       1    10
1    2       1    10
1    3       1    10
2    1       2    8
2    3       3    7

将来:

Week Product Sold Stock
1    1       1    10
1    2       1    10
1    3       1    10
2    1       2    8
2    2       0    10
2    3       3    7

1 个答案:

答案 0 :(得分:2)

使用product中的itertools和“周”和“产品”两列的所有组合创建数据框,并将merge与原始数据一起使用。假设您的数据帧称为dfp

from itertools import product
new_dfp = (pd.DataFrame(list(product(dfp.Week.unique(), dfp.Product.unique())),columns=['Week','Product'])
                 .merge(dfp,how='left'))

您在new_dfp中缺少行:

   Week  Product  Sold  Stock
0     1        1   1.0   10.0
1     1        2   1.0   10.0
2     1        3   1.0   10.0
3     2        1   2.0    8.0
4     2        2   NaN    NaN
5     2        3   3.0    7.0

现在fillna在两列中的值都不同:

new_dfp['Sold'] = new_dfp['Sold'].fillna(0).astype(int) # because no sold in missing rows
new_dfp['Stock'] = new_dfp.groupby('Product')['Stock'].fillna(method='ffill').astype(int)

要填充“库存”,您需要groupby产品,并使用“填充”方法放置与上一个“周”相同的值。最后,您将得到:

   Week  Product  Sold  Stock
0     1        1     1     10
1     1        2     1     10
2     1        3     1     10
3     2        1     2      8
4     2        2     0     10
5     2        3     3      7