如何用Python Pandas按整数波长分组对DataFrame求均值?
最优解法:按整数波长分组计算均值
嘿,这个需求用Pandas的分组聚合功能就能高效解决,完全不用复杂的循环逻辑。下面是具体步骤和代码:
步骤说明
你的核心需求是把wave列中整数部分相同的行归为一组,然后对cross和cross2列计算平均值,Pandas的groupby配合类型转换就能完美实现这个逻辑:
- 将浮点型的
wave列转换为整数类型(自动截断小数部分,比如299.5会变成299,正好符合你的分组规则); - 以转换后的整数
wave为分组键,对目标列计算均值; - 保留
wave作为普通列(而非索引),得到最终结果。
完整代码示例
首先构造你的示例DataFrame:
import pandas as pd # 初始化示例数据 data = { 'wave': [299.0, 299.5, 300.0, 300.5, 300.8], 'cross': [1.25, 1.30, 1.45, 1.65, 1.56], 'cross2': [3.30, 4.20, 4.36, 4.32, 4.56] } df = pd.DataFrame(data)
然后执行核心分组聚合操作:
# 按整数波长分组并计算均值,可选保留两位小数 result_df = df.groupby(df['wave'].astype(int), as_index=False)[['cross', 'cross2']].mean().round(2) # 查看结果 print(result_df)
输出结果
运行后你会得到:
wave cross cross2 0 299 1.28 3.75 1 300 1.55 4.41
(注:你给出的示例中299对应的cross值是1.30,这应该是四舍五入的差异,上面的结果是精确计算后保留两位小数的结果,和你的预期基本一致)
为什么这是最优方法?
- 效率高:
astype(int)和groupby都是Pandas底层优化过的操作,处理十万甚至百万级别的数据都能快速完成,比手动循环处理快几个数量级; - 代码简洁:一行核心代码就完成了分组和聚合,可读性极强,后续维护也方便;
- 扩展性强:如果后续需要计算其他统计量(比如求和、中位数),只需要把
.mean()换成对应的方法(.sum()、.median())即可。
内容的提问来源于stack exchange,提问作者Sanne
相关产品推荐
相关产品推荐

