首页 > 解决方案 > Pandas 按索引均值划分列

问题描述

我有一个带有 2 个索引的 pandas 数据框,我想将每个值除以第二个索引(A,B)的列平均值。

例如输入 df

       col1    col2
0 A     1      20
1 A     2      10
2 A     1      10
4 A     4      5
5 B     6      15
6 B     2      50

所以对于 col1,我将 0A 1A 2A 减少 2,因为 1,2,1,4 的平均值是 2。

       col1   
0 A     0.5     
1 A     1       
2 A     0.5     
4 A     2      
5 B     1.5     
6 B     0.5    

谁能看到这样做的好方法?

标签: pandas

解决方案


IIUC,尝试:

df.groupby(level=1)['col1'].apply(lambda x: x/x.mean())

没有应用更好的是:

df.col1/df.groupby(level=1)['col1'].transform('mean')

输出

0  A    0.5
1  A    1.0
2  A    0.5
4  A    2.0
5  B    1.5
6  B    0.5

推荐阅读