Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 表中每列的周期差_Python_Pandas - Fatal编程技术网

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()