我有一个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
答案 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