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

Pandas:对名称含递增中间数字的列分组求均值

解决方案

针对你的需求,我们可以通过拆分列名、分组聚合的方式,高效实现同后缀列的均值计算并生成指定格式的新列,具体步骤如下:

完整代码实现

import pandas as pd

# 原始DataFrame
df_ex = pd.DataFrame({
'alpha.1.try': [2,4,2.0,-0.5,6,120], 
'alpha.1.test': [1, 3, 4, 2,40,11], 
'alpha.1.sample': [3, 2, 3, 4,2,2], 
'alpha.3.try': [6, 2.2, 7, 0,3,3],
'alpha.3.test': [12, 4, 7, -5,5,5],
'alpha.3.sample': [2, 3, 8, 2,12,8],
'alpha.5.try': [6, 2.2, 7, 0,3,3],
'alpha.5.test': [12, 4, 11, -5,5,5],
'alpha.5.sample': [2, 3, 8, 2,12,8]})

# 1. 拆分列名为前缀、中间数字、后缀三部分
cols_split = df_ex.columns.str.split('.', expand=True)
cols_split.columns = ['prefix', 'num', 'suffix']

# 2. 筛选出中间数字为1、3、5的目标列
target_cols = df_ex.columns[cols_split['num'].isin(['1', '3', '5'])]

# 3. 按前缀+后缀分组,计算每组的均值
avg_df = df_ex[target_cols].groupby(
    [cols_split.loc[target_cols, 'prefix'], cols_split.loc[target_cols, 'suffix']],
    axis=1
).mean()

# 4. 将新列重命名为「prefix.135.suffix」格式
avg_df.columns = [f"{prefix}.135.{suffix}" for prefix, suffix in avg_df.columns]

# 5. 合并均值列到原DataFrame
df_ex = pd.concat([df_ex, avg_df], axis=1)

print(df_ex)

关键逻辑说明

  • 列名拆分:用str.split('.', expand=True)将列名拆分为三部分,避免用str.contains匹配时误判类似alpha.10.try这类不符合要求的列。
  • 精准筛选:通过isin(['1','3','5'])直接定位目标数字对应的列,匹配更准确。
  • 分组聚合:按前缀和后缀分组,确保所有同后缀的列被聚合计算均值,适配列名数量和后缀变化的场景。
  • 列名重命名:按指定格式生成新列名,保持与原列名的逻辑一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:35:25