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

Pandas按两列唯一配对分组计算value列平均值,grouper是否适用

解法

你需要先把start和end的正反组合映射为同一个分组标识,再分组求均值即可,不需要用到pd.Grouper,普通groupby就能实现:

完整实现代码

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({
    'start': {0: 365, 1: 365, 2: 365, 3: 365, 4: 356, 5: 261, 6: 240, 7: 238},
    'end': {0: 240, 1: 261, 2: 356, 3: 238, 4: 365, 5: 365, 6: 365, 7: 365},
    'value': {0: 585, 1: 567, 2: 191, 3: 186, 4: 196, 5: 545, 6: 564, 7: 184}
})

# 构造统一分组键:每行的start、end按大小排序,正反组合会得到相同的分组键
df['group_min'] = df[['start', 'end']].min(axis=1)
df['group_max'] = df[['start', 'end']].max(axis=1)

# 分组求均值,按期望输出格式把大值设为start,小值设为end
result = df.groupby(['group_min', 'group_max'], as_index=False)['value'].mean()
result = result.rename(columns={'group_max': 'start', 'group_min': 'end'})[['start', 'end', 'value']]

print(result)

输出结果

start  end  value
0    365  238  185.0
1    365  240  574.5
2    365  261  556.0
3    365  356  193.5

完全匹配你给出的预期输出。

关于pd.Grouper的说明

pd.Grouper主要用于时间维度的分组聚合(比如按周/月分组)、或者指定分组的轴、级别等参数,你这个场景属于自定义规则的普通分组,不需要使用pd.Grouper,直接传入分组列给groupby即可,逻辑更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:39:03