You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中按Thing和Type分组对Value列进行归一化处理

Pandas实现分组归一化(按thing和type分组)

直接用groupby结合transform就能实现完全向量化的计算,不需要循环逐行处理,代码如下:

import pandas as pd

# 针对已有DataFrame df执行以下代码
df['norm'] = df['value'] / df.groupby(['thing', 'type'])['value'].transform('mean')

原理说明

  • df.groupby(['thing', 'type'])['value']:按thing和type的组合对value列进行分组
  • .transform('mean'):计算每组的均值,同时返回一个和原DataFrame行数一致的Series(每组内的所有行都会填充该组的均值)
  • 最后用原value列除以这个均值Series,直接得到归一化后的norm列

示例验证

举个符合你描述的示例:

# 创建示例数据
data = {
    'thing': ['a', 'a', 'b', 'b', 'a', 'a'],
    'type': ['t1', 't1', 't1', 't1', 't2', 't2'],
    'value': [1, 5, 3, 7, 4, 8]
}
df = pd.DataFrame(data)

# 计算归一化列
df['norm'] = df['value'] / df.groupby(['thing', 'type'])['value'].transform('mean')

print(df)

运行后输出:

thing type  value      norm
0     a   t1      1  0.333333  # 1/( (1+5)/2 ) = 1/3
1     a   t1      5  1.666667  # 5/3
2     b   t1      3  0.600000  # 3/( (3+7)/2 ) = 3/5
3     b   t1      7  1.400000  # 7/5
4     a   t2      4  0.666667  # 4/( (4+8)/2 ) = 4/6
5     a   t2      8  1.333333  # 8/6

完全符合你要求的分组归一化逻辑,全程都是Pandas的向量化操作,效率远高于逐行处理。

内容的提问来源于stack exchange,提问作者DM71

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:15:40