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

Pandas多索引DataFrame:带行过滤的分组均值映射需求

解决方案

可以通过两种方法实现需求,既保留原DataFrame的所有行,又能按指定分组计算目标均值并映射到每一行:

方法一:使用groupby+transform(简洁写法)

利用transform方法的特性,它会返回与原DataFrame行数一致的结果,同时在分组内仅对EST_UNIV == 1的行计算均值:

import pandas as pd

# 假设你的多索引DataFrame名为df
df['EY_group_mean'] = df.groupby(['date', 'SECTOR'])['EY'].transform(
    lambda x: x[df.loc[x.index, 'EST_UNIV'] == 1].mean()
)

这里transform会遍历每个['date','SECTOR']分组,在组内筛选出EST_UNIV == 1的EY值计算均值,再将该均值填充到组内的每一行,包括EST_UNIV == 0的行。

方法二:先计算分组均值再合并(高效写法)

如果数据量较大,这种方法的性能更优,步骤如下:

  1. 先筛选出符合条件的行,计算分组均值并保存为单独的DataFrame:
mean_data = df[df['EST_UNIV'] == 1].groupby(['date', 'SECTOR'])['EY'].mean().reset_index(name='EY_group_mean')
  1. 通过merge将均值数据合并回原DataFrame,使用how='left'确保保留原数据的所有行:
df = df.merge(mean_data, on=['date', 'SECTOR'], how='left')

两种方法最终都会在原DataFrame中新增一列(比如EY_group_mean),每一行都会对应其所在['date','SECTOR']组的目标均值,不会丢失任何原始行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:05:24