gpt4 book ai didi

python - pandas 面板数据的百分比变化

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:52 25 4
gpt4 key购买 nike

我有以下面板数据,长格式。列日期是时间维度,与 supermkt 和产品一起标识一个观察值。我想计算列价格随时间的百分比变化(每个 supermkt、产品丢失一个观察值)。

cols = ['date', 'supermkt', 'product', 'price']

data = [['2012-08-01',1,1,83],
['2012-08-02',1,1,68],
['2012-08-03',1,1,94],
['2012-08-04',1,1,98],
['2012-08-05',1,1,101],
['2012-08-01',1,2,21],
['2012-08-02',1,2,6],
['2012-08-03',1,2,6],
['2012-08-04',1,2,4],
['2012-08-05',1,2,12],
['2012-08-01',2,1,78],
['2012-08-02',2,1,88],
['2012-08-03',2,1,48],
['2012-08-04',2,1,48],
['2012-08-05',2,1,48]]

d = pd.DataFrame(data, columns=cols)

supermkt=1,product=1 的预期输出:

cols = ['date', 'supermkt', 'product', 'price','pct_change']

data = [[2012-08-01,1,1,83,Nan],
[2012-08-02,1,1,68,-0.18],
[2012-08-03,1,1,94,0.38],
[2012-08-04,1,1,98,1.04],
[2012-08-05,1,1,101,1.03]]

最佳答案

IIUC,使用groupby + pct_change:

df.assign(pct_change=df.groupby(['supermkt', 'product']).price.pct_change())

date supermkt product price pct_change
0 2012-08-01 1 1 83 NaN
1 2012-08-02 1 1 68 -0.180723
2 2012-08-03 1 1 94 0.382353
3 2012-08-04 1 1 98 0.042553
4 2012-08-05 1 1 101 0.030612
5 2012-08-01 1 2 21 NaN
6 2012-08-02 1 2 6 -0.714286
7 2012-08-03 1 2 6 0.000000
8 2012-08-04 1 2 4 -0.333333
9 2012-08-05 1 2 12 2.000000
10 2012-08-01 2 1 78 NaN
11 2012-08-02 2 1 88 0.128205
12 2012-08-03 2 1 48 -0.454545
13 2012-08-04 2 1 48 0.000000
14 2012-08-05 2 1 48 0.000000

关于python - pandas 面板数据的百分比变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com