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

如何在Pandas中按page分组对pageviews进行最大最小归一化?

高效实现Pandas DataFrame按组的最大最小归一化

针对你需要对pageviews字段按page分组做最大最小归一化(Min-Max Scaling)的需求,结合10万行数据的效率要求,推荐使用Pandas的**分组变换(groupby + transform)**方案,这是处理这类分组计算最高效的方式之一,完全避开了循环操作带来的性能损耗。

实现代码

先还原你的测试DataFrame结构(方便验证):

import pandas as pd

data = {
    'page': ['example.com/a', 'example.com/a', 'example.com/a', 'example.com/b', 'example.com/b', 'example.com/b'],
    'days since publishing': [1, 2, 3, 1, 2, 3],
    'pageviews': [5000, 10000, 7500, 10000, 20000, 15000]
}
df = pd.DataFrame(data)

然后执行核心的归一化操作:

def min_max_scale(x):
    return (x - x.min()) / (x.max() - x.min())

# 按page分组后对pageviews字段应用归一化变换
df['pageviews'] = df.groupby('page')['pageviews'].transform(min_max_scale)

执行后就能得到你期望的结果:

page  days since publishing  pageviews
0  example.com/a                      1        0.0
1  example.com/a                      2        1.0
2  example.com/a                      3        0.5
3  example.com/b                      1        0.0
4  example.com/b                      2        1.0
5  example.com/b                      3        0.5

优化补充:处理边界情况

如果你的数据中存在某个分组的pageviews最大值和最小值相等(比如该分组所有页面浏览量都一致),可以给归一化函数加个判断,避免出现除以0的错误:

def min_max_scale(x):
    x_min = x.min()
    x_max = x.max()
    return (x - x_min) / (x_max - x_min) if x_max != x_min else 0.0

方案效率说明

Pandas的groupby.transform是基于向量化操作实现的,比手动遍历每个分组的效率高一个数量级,完全适配10万行级别的数据量,不会出现明显的性能瓶颈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:28:46