我有一个这样的数据框:
df = pd.DataFrame({'x': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'], 'y': [0,1,0,1,0,1,0,1], 'z':[100, 102, 110, 115, 200, 202, 230, 240]})
x y z
0 a 0 100
1 a 1 102
2 a 0 110
3 a 1 115
4 b 0 200
5 b 1 202
6 b 0 230
7 b 1 240
之后:
df.groupby(['x', 'y'])['z'].sum()
x y
a 0 210
1 217
b 0 430
1 442
我想找出每组百分比之和之间的差异。 换句话说,我想要这样:
(217-210)/210 = 3.33
(442-430)/430 = 2.79
答案 0 :(得分:1)
您可以groupby
x
和y
并像以前一样使用sum
,然后使用DataFrame.pct_change
进行分组后的百分比变化再次由x
:
g = df.groupby(['x','y'])['z'].sum()
g.groupby(level=0).pct_change().mul(100).dropna().reset_index(drop=True, level=1)
x
a 3.333333
b 2.790698
Name: z, dtype: float64