python - 如何计算 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()
我试过循环这些方法,但我不知道如何进行元素引用,同时只将每个平均值应用于正确的行。
我认为列表理解会起作用,但我遇到了与上面相同的问题。
解决方案
让我们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
推荐阅读
- gnuplot - 水平键在 GNUPLOT 中垂直显示
- apache-camel - 覆盖或拦截 Camel 日志记录
- python - 根据列值合并一个数据框而不从左侧删除任何列
- bash - Bash 似乎将 LF 转换为 LFCR
- php - 我尝试在 localhost 上运行 xampp,但 xampp 不断将我重定向到 Web 服务器
- sql - 从聚合查询中的组中的第一条记录获取值
- laravel - 如何在 Laravel 中写回复?
- php - 打印多选错误消息
- c# - PCLCrypto PEM PublicKey 到 Portable.BouncyCastle 或 System.Security.Cryptography .NetStandard2.0 的转换
- mysql - 大量条目以指数方式损失性能