Python 表中每列的周期差
我在熊猫中有一个奇怪的原始数据框,看起来像:Python 表中每列的周期差,python,pandas,Python,Pandas,我在熊猫中有一个奇怪的原始数据框,看起来像: class year period type info valuebasic value1 value2 value3... value16 A 2019 16 A bla 10 1 0 0 2 A 2019 32 A bla 20 0 1 1 1 ... A 2021 16
class year period type info valuebasic value1 value2 value3... value16
A 2019 16 A bla 10 1 0 0 2
A 2019 32 A bla 20 0 1 1 1
...
A 2021 16 A bla 30 30 1 2 1
...
B 2019 16 A bla 1 1 1 1 1
我想计算每个学年和每个时段的累积szn fir值列,这样我就得到了17-32等时段的累积szn fir值,其结果是以下数据帧:
class year period type info value
A 2019 16 A bla 10
A 2019 17 A bla 11 (10+1)
A 2019 18 A bla 11 (10+1+0)
....
A 2019 32 A bla 20 (10+1+0+0+...+2)
A 2019 32 A bla 20
...
A 2021 16 A bla 30
.....
B 2019 16 A bla 1
....
B 2019 32 A bla 24 (1+1+...+1)
用于与以下对象一起取消PIVOT:
替代解决方案:
df = (df.set_index(['class','year','period','valuebasic'])
.stack()
.reset_index(level=4, drop=True)
.reset_index(name='value'))
df['value1'] = df['valuebasic'] + df.groupby(['class','year','period'])['value'].cumsum()
print (df)
class year period valuebasic value value1
0 A 2019 16 10 1 11
1 A 2019 16 10 0 11
2 A 2019 16 10 0 11
3 A 2019 16 10 2 13
4 A 2019 32 20 0 20
5 A 2019 32 20 1 21
6 A 2019 32 20 1 22
7 A 2019 32 20 1 23
8 A 2021 16 30 30 60
9 A 2021 16 30 1 61
10 A 2021 16 30 2 63
11 A 2021 16 30 1 64
12 B 2019 16 1 1 2
13 B 2019 16 1 1 3
14 B 2019 16 1 1 4
15 B 2019 16 1 1 5
对于重新安装原始列值
使用:
df['value'] = df['valuebasic'] + df.groupby(['class','year','period'])['value'].cumsum()
这不会产生正确的结果,我在数组中包含了更多的“类”、“年”、“期间”(例如:“产品”、“tpye”)。因此,第一种方法以零数据帧结束,中间的数据帧看起来不正确。中间的数据帧有一些字母,因此在“值”中column@PV8-您能否更改see问题预期输出的数据样本?我添加了示例above@PV8-是否可能忘记了某列传递给
设置索引
?
df['value'] = df['valuebasic'] + df.groupby(['class','year','period'])['value'].cumsum()