首页 > 解决方案 > 如何计算 Pandas 数据框中新的“标准化”列?

问题描述

给定df

    Value Machine
0      10       A
1      20       A
2      30       A
5      100      B
6      200      B
7      300      B

如何计算一个新列df['norm'],其中机器 A 的值除以机器 A 的平均值(按元素),机器 B 的值除以机器 B 的平均值,得到:

   Value  Machine  norm
0      10       A  0.5
1      20       A  1.0
2      30       A  1.5
5      100      B  0.5
6      200      B  1.0
7      300      B  1.5

请注意,唯一机器的数量是可变的。

我可以这样计算每台机器的平均值groupby

machine_mean = df.groupby("Machine").mean().reset_index()

我试过循环这些方法,但我不知道如何进行元素引用,同时只将每个平均值应用于正确的行。

我认为列表理解会起作用,但我遇到了与上面相同的问题。

标签: pythonpandas

解决方案


让我们transform一起做mean

df['norm'] = df['Value']/df.groupby('Machine')['Value'].transform('mean')
df
Out[209]: 
   Value Machine  norm
0     10       A   0.5
1     20       A   1.0
2     30       A   1.5
5    100       B   0.5
6    200       B   1.0
7    300       B   1.5

推荐阅读