Python:提取DataFrame列并将重复列替换为均值的实现求助
解决重复列名的均值计算问题
针对你的需求,先修正你现有for循环的问题,再提供更简洁的pandas内置方法:
方法一:修正你的for循环实现
你的代码核心问题是没有正确提取对应时间点的列,以及后续赋值逻辑不完善。以下是修正后的完整代码:
import pandas as pd # 假设你的原始DataFrame名为df,行索引为外显子 column_names = df.columns unique_ages = set(column_names) mean_df = pd.DataFrame(index=df.index, columns=unique_ages) for age in unique_ages: # 提取所有列名为当前age的列 age_cols = df.loc[:, age] # 计算每行的均值:单列时自动返回原数据,多列时计算均值 mean_values = age_cols.mean(axis=1) # 将结果赋值到mean_df的对应列 mean_df[age] = mean_values
关键修正点:
- 用
df.loc[:, age]精准提取所有列名为age的列,兼容单列/多列场景 - 无需单独判断列数:pandas的
mean(axis=1)对单列会直接返回原数据(单列均值即自身),可统一处理 - 直接复用原始DataFrame的索引
df.index,避免手动传入exons可能出现的索引不匹配问题
方法二:更简洁的pandas内置方法(推荐)
pandas提供了按列名分组聚合的内置方法,无需手动写循环,代码更简洁高效:
import pandas as pd # 按列名分组(axis=1表示按列分组),直接计算每行的均值 mean_df = df.groupby(df.columns, axis=1).mean()
这个方法会自动将所有同名列分组,计算每组的行均值,直接生成目标DataFrame,完美适配这类重复列聚合的场景。
内容的提问来源于stack exchange,提问作者Marstian
相关产品推荐
相关产品推荐

