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

Pandas如何忽略取值顺序对两列执行分组聚合操作

实现方法

核心思路是为每一行生成不区分Colour1、Colour2顺序的统一分组键,再基于分组键计算均值回写即可,以下是可直接运行的实现方案:

高性能版本(推荐,适合数据量较大的场景)

依赖numpy实现按行快速排序生成统一分组键:

import pandas as pd
import numpy as np

# 构造示例数据
mydf = pd.DataFrame({'Colour1': ['Red', 'Red', 'Blue', 'Green', 'Blue'], 'Colour2': ['Red', 'Blue', 'Red', 'Blue', 'Green'], 'Rating': [4, 5, 7, 8, 2]})

# 对两列颜色按行升序排序,生成忽略顺序的分组元组
group_key = [tuple(x) for x in np.sort(mydf[['Colour1', 'Colour2']], axis=1)]

# 分组计算均值后直接映射回原表
mydf['MeanRating'] = mydf['Rating'].groupby(group_key).transform('mean')

无额外依赖版本(写法更易懂,适合小数据量场景)

仅用pandas的apply方法生成分组键:

import pandas as pd

mydf = pd.DataFrame({'Colour1': ['Red', 'Red', 'Blue', 'Green', 'Blue'], 'Colour2': ['Red', 'Blue', 'Red', 'Blue', 'Green'], 'Rating': [4, 5, 7, 8, 2]})

# 对每行的两个颜色值排序后转元组作为分组键
group_key = mydf.apply(lambda row: tuple(sorted([row['Colour1'], row['Colour2']])), axis=1)
mydf['MeanRating'] = mydf['Rating'].groupby(group_key).transform('mean')

两种方案运行后得到的结果和你给出的预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:48:01