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

如何在Pandas中将Column_A分为(1,2,3)和(4,5)分组求Column_B均值?

问题描述

现有如下DataFrame:

Column_AColumn_B
120
225
152
222
467
134
3112
555
433
587
1108

需要将Column_A的值分为两组:第一组为[1,2,3],第二组为[4,5],计算每组对应的Column_B的平均值。


解决方案

可以通过以下几种方式实现你的需求,同时纠正你尝试写法中的问题:

方法1:用映射表生成分组标签

先定义分组映射规则,将Column_A的值映射到对应组,再通过groupby计算均值:

import pandas as pd

# 构造示例DataFrame
data = {
    "Column_A": [1,2,1,2,4,1,3,5,4,5,1],
    "Column_B": [20,25,52,22,67,34,112,55,33,87,108]
}
df = pd.DataFrame(data)

# 定义分组映射
group_map = {1: "组1(1-3)", 2: "组1(1-3)", 3: "组1(1-3)", 4: "组2(4-5)", 5: "组2(4-5)"}
# 生成分组列
df["分组"] = df["Column_A"].map(group_map)
# 按分组计算Column_B的平均值
result = df.groupby("分组")["Column_B"].mean()
print(result)

输出结果:

分组
组1(1-3)    53.285714
组2(4-5)    60.500000
Name: Column_B, dtype: float64

方法2:用条件判断直接生成分组

无需提前定义映射表,通过isin结合np.where直接生成分组标签:

import pandas as pd
import numpy as np

df = pd.DataFrame(data)

# 生成分组标签
df["分组"] = np.where(df["Column_A"].isin([1,2,3]), "组1(1-3)", "组2(4-5)")
# 计算均值
result = df.groupby("分组")["Column_B"].mean()
print(result)

输出结果与方法1一致。


关于你尝试写法的说明

你提到的[["Column_A"] == 1, 2, 3].groupby(Column_B).mean()这类写法存在两处问题:

  1. 语法错误:["Column_A"] == 1,2,3不符合Python条件判断逻辑,正确的筛选逻辑应该用df["Column_A"].isin([1,2,3])来定位属于该组的行
  2. 逻辑错误:你需要基于Column_A的分组来聚合Column_B,而非用Column_B作为分组依据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:30:53