我有一个像这样的熊猫数据框:
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
现在,我想通过id
和variable
分组,并通过除以连续行的值来更新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
如何实现?
答案 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