熊猫groupby将连续的行划分为某些特定的组

时间:2020-08-05 17:43:20

标签: python pandas dataframe

我有一个像这样的熊猫数据框:

id variable year value
1     a      20   1.1
1     a      21   1.1
1     a      22   1.2
2     a      20   0.5
2     a      21   0.3
2     a      22   0.1
1     b      20   1.1
1     b      21   1.1
1     b      22   1.2
2     b      20   0.5
2     b      21   0.3
2     b      22   0.1

现在,我想通过idvariable分组,并通过除以连续行的值来更新value列,以用于variable是a的组。我想保留其余的组。

id variable year value
1     a      20   
1     a      21   1
1     a      22   1.09
2     a      20   
2     a      21   0.6
2     a      22   0.33
1     b      20   1.1
1     b      21   1.1
1     b      22   1.2
2     b      20   0.5
2     b      21   0.3
2     b      22   0.1

最后,对于具有variable a的组,2020值不可用,我想在2020年复制2021值。

id variable year value
1     a      20   1
1     a      21   1
1     a      22   1.09
2     a      20   0.6
2     a      21   0.6
2     a      22   0.33
1     b      20   1.1
1     b      21   1.1
1     b      22   1.2
2     b      20   0.5
2     b      21   0.3
2     b      22   0.1

如何实现?

1 个答案:

答案 0 :(得分:1)

让我们尝试pct_change

s=1+df.groupby(['id','variable']).value.pct_change().bfill()
df.loc[df.variable=='a','value']=s
df
Out[52]: 
    id variable  year     value
0    1        a    20  1.000000
1    1        a    21  1.000000
2    1        a    22  1.090909
3    2        a    20  0.600000
4    2        a    21  0.600000
5    2        a    22  0.333333
6    1        b    20  1.100000
7    1        b    21  1.100000
8    1        b    22  1.200000
9    2        b    20  0.500000
10   2        b    21  0.300000
11   2        b    22  0.100000