使用Pandas按多条件组合计算DataFrame列的平均值
用Pandas按指定条件分组计算平均值的高效方法
原始DataFrame如下:
| COND1 | COND2 | COND3 | COND4 | A | B | C |
|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 100 | 0.3 | 44 |
| 1 | 1 | 2 | 2 | 50 | 0.2 | 55 |
| 1 | 2 | 1 | 1 | 200 | 1.5 | 91 |
| 1 | 2 | 2 | 2 | -50 | 1.8 | 18 |
| 2 | 1 | 1 | 1 | 30 | -0.5 | 52 |
| 2 | 1 | 2 | 2 | -85 | 0.1 | 84 |
| 2 | 2 | 1 | 1 | 42 | 0.01 | 44 |
| 2 | 2 | 2 | 2 | 86 | -0.4 | 18 |
需求是按以下四种COND1与COND2的组合,分别计算A、B、C列的平均值:
- COND1=1 且 COND2=1
- COND1=1 且 COND2=2
- COND1=2 且 COND2=1
- COND1=2 且 COND2=2
已知Excel筛选可以实现,想知道用Python Pandas有没有更高效的方法。
解决方案:使用groupby分组聚合
Pandas里用groupby方法可以一次性完成所有分组的平均值计算,比手动逐个筛选高效太多,步骤如下:
1. 准备数据
如果你的数据是从文件(比如Excel、CSV)读取的,直接用pd.read_excel()或pd.read_csv()导入即可;如果是手动构造,代码如下:
import pandas as pd data = { 'COND1': [1,1,1,1,2,2,2,2], 'COND2': [1,1,2,2,1,1,2,2], 'COND3': [1,2,1,2,1,2,1,2], 'COND4': [1,2,1,2,1,2,1,2], 'A': [100,50,200,-50,30,-85,42,86], 'B': [0.3,0.2,1.5,1.8,-0.5,0.1,0.01,-0.4], 'C': [44,55,91,18,52,84,44,18] } df = pd.DataFrame(data)
2. 分组计算平均值
一行代码就能得到所有组合的结果:
# 按COND1和COND2分组,仅计算A、B、C列的平均值 result = df.groupby(['COND1', 'COND2'])[['A', 'B', 'C']].mean().reset_index()
3. 查看结果
打印result会得到:
| COND1 | COND2 | A | B | C |
|---|---|---|---|---|
| 1 | 1 | 75.0 | 0.25 | 49.5 |
| 1 | 2 | 75.0 | 1.65 | 54.5 |
| 2 | 1 | -27.5 | -0.2 | 68.0 |
| 2 | 2 | 64.0 | -0.195 | 31.0 |
正好对应你需要的四个条件组合,无需手动逐个筛选。
单独提取特定组合
如果只需要某一个组合的结果,比如COND1=1且COND2=1,直接用loc筛选:
target = result.loc[(result['COND1'] == 1) & (result['COND2'] == 1)] print(target)
内容的提问来源于stack exchange,提问作者snowballtrader
相关产品推荐
相关产品推荐

