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
相关产品推荐
相关产品推荐

