如何在Pandas中将Column_A分为(1,2,3)和(4,5)分组求Column_B均值?
问题描述
现有如下DataFrame:
| Column_A | Column_B |
|---|---|
| 1 | 20 |
| 2 | 25 |
| 1 | 52 |
| 2 | 22 |
| 4 | 67 |
| 1 | 34 |
| 3 | 112 |
| 5 | 55 |
| 4 | 33 |
| 5 | 87 |
| 1 | 108 |
需要将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()这类写法存在两处问题:
- 语法错误:
["Column_A"] == 1,2,3不符合Python条件判断逻辑,正确的筛选逻辑应该用df["Column_A"].isin([1,2,3])来定位属于该组的行 - 逻辑错误:你需要基于
Column_A的分组来聚合Column_B,而非用Column_B作为分组依据
内容的提问来源于stack exchange,提问作者MB2000
相关产品推荐
相关产品推荐

