假设具有以下格式的数据框:
关于数据的一些重要说明,数据集非常大,有数十万行,因此解决方案需要扩展。有数千家独特的商店和数千种独特的产品,每家商店都有多个日期的数据,比简单示例数据集中显示的两个多
更新到这个原始问题,因为存在一些清晰度问题: Pandas fill row values using previous period
d = {'store': ['s1', 's1', 's1', 's2', 's2', 's2'], 'product': ['a', 'a', 'b', 'c', 'b', 'b'], 'amount': [1, 2, 3, 5, 2, 3],'value': [1, 2, 3, 5, 2, 3], 'date': ['2020-6-6', '2020-6-7', '2020-6-7',
'2020-6-6', '2020-6-6','2020-6-7']}
df = pd.DataFrame(data=d)
print(df)
store product amount value date
0 s1 a 1 1 2020-6-6
1 s1 a 2 2 2020-6-7
2 s1 b 3 3 2020-6-7
3 s2 c 5 5 2020-6-6
4 s2 b 2 2 2020-6-6
5 s2 b 3 3 2020-6-7
对于商店 S2,产品 c 在 2020 年 6 月 7 日不再存在,我希望能够计算百分比变化或每种产品数量的差异。
例如:df['diff'] = df.groupby(['store','product'])['amount'].diff()
但是为了使其工作并显示例如 c 的差异是 -3 和 -100%,c 需要在下一个日期出现,并且数量设置为 0
这是我正在寻找的结果:
print(df)
store product amount value date
0 s1 a 1 1 2020-6-6
1 s1 a 2 2 2020-6-7
2 s1 b 3 3 2020-6-7
3 s2 c 5 5 2020-6-6
4 s2 b 2 2 2020-6-6
5 s2 b 3 3 2020-6-7
6 s2 c 0 0 2020-6-7