Python分组列均值计算问题:按radii分组求dens列均值输出不符预期
解决方案:按指定列分组计算目标列均值并保留分组列
问题分析
你的代码当前存在两个核心问题:
groupby(['radii']).mean()会计算所有数值列的平均值,而非仅目标列dens- 使用
result.values输出时丢失了分组列radii(它默认成为了DataFrame的索引)
修改后的代码(两种可选实现)
方法一:保留分组列为索引,组合后输出
import numpy as np import pandas as pd # 读取数据,自动处理多空格分隔的情况 df = pd.read_table("test.txt", delim_whitespace=True) # 仅对dens列按radii分组求均值,保留radii为索引 result = df.groupby('radii')['dens'].mean() # 将索引(radii)和均值组合成二维数组 output_data = np.column_stack((result.index, result.values)) # 保存结果,匹配预期的格式精度 np.savetxt('result.txt', output_data, fmt='%f %f')
方法二:将分组列转为普通列后输出
import numpy as np import pandas as pd df = pd.read_table("test.txt", delim_whitespace=True) # as_index=False让radii作为普通列,仅计算dens的均值 result = df.groupby('radii', as_index=False)['dens'].mean() # 直接输出结果的数值部分 np.savetxt('result.txt', result.values, fmt='%f %f')
关键改动说明
- 替换
delimiter=" "为delim_whitespace=True:自动适配数据中多个空格的分隔场景,避免读取错误 - 分组时指定
['dens']:仅计算目标列的平均值,排除其他无关列 - 保留分组列信息:要么通过索引组合输出,要么用
as_index=False将其转为普通列,确保结果包含radii值 - 调整
fmt参数:保证输出的小数精度与预期一致
输出结果验证
运行修改后的代码,输出文件result.txt将与你的预期完全匹配:
0.024614 0.697947
0.073841 0.872433
0.123068 0.523459
(注:小数末尾的四舍五入属于正常精度处理,与预期值一致)
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

