pandas中如何对相同名称的列计算每行平均值
重复列名按列分组求行均值的实现方法
你写的df.groupby(by=df.columns, axis=1).mean()本身逻辑是正确的,没有得到预期结果大概率是你的DataFrame列名实际存在隐藏字符(比如前后空格、不可见特殊符号),导致名义上相同的列名没有被识别为同一分组。
正确实现方案
方案1:先清理列名再按列分组(推荐)
先统一清理列名的多余字符,再分组计算,避免隐藏字符干扰:
# 清理列名:去除前后空白字符、统一大小写等,按需调整 df.columns = df.columns.str.strip() # 按列名分组,横向计算每行均值 df_mean = df.groupby(df.columns, axis=1).mean()
方案2:转置后按索引分组再转置
兼容性更强,不受pandas版本差异影响:
df_mean = df.T.groupby(level=0).mean().T
完整可运行测试代码
import pandas as pd # 构造和你提供的结构一致的测试数据 df = pd.DataFrame( [[1,2,3,0,1,2,1,3,5], [4,5,6,3,4,5,2,4,6], [7,8,9,6,7,8,3,5,7]], columns=['a','a','a','b','b','b','c','c','c'] ) # 计算结果 df_mean = df.groupby(df.columns, axis=1).mean() # 如果需要输出整数格式,加上类型转换即可 # df_mean = df_mean.astype(int) print(df_mean)
运行后输出结果和你预期完全一致:
a b c 0 2.0 1.0 3.0 1 5.0 4.0 4.0 2 8.0 7.0 5.0
内容的提问来源于stack exchange,提问作者Julie
相关产品推荐
相关产品推荐

