如何用scipy.stats.binned_statistic实现深度区间温度均值统计?
解决按深度区间计算温度均值的问题
你当前的代码存在两个关键问题:
- 参数顺序颠倒:
scipy.stats.binned_statistic的第一个参数是用于分组的变量(你需要的是深度/压力),第二个参数是要计算统计量的变量(温度),你刚好写反了。 - bins参数设置错误:传入
bins=1636会把数据拆成1636个等宽区间,完全不符合你要的0-10、10-20这类以10为间隔的分组逻辑。
正确实现步骤
假设你的CSV数据中,深度列名为pressure,温度列名为temperature,按以下方式修改代码即可实现需求:
- 自定义深度区间:根据数据中深度的最大值,生成以10为步长的区间边界,确保覆盖所有深度数据。
- 调用统计函数:传入正确的参数顺序,指定统计量为均值。
- 整理结果格式:计算每个区间的中点(如0-10的中点为5),将结果整理为你需要的表格样式。
完整代码示例
import pandas as pd from scipy.stats import binned_statistic # 读取CSV数据(假设你已完成此步骤) data = pd.read_csv('your_data.csv') # 1. 生成以10为间隔的深度区间 max_depth = data['pressure'].max() bins = range(0, int(max_depth) + 11, 10) # 生成0,10,20,...,覆盖最大深度的区间边界 # 2. 计算每个深度区间的温度均值 binned_stats = binned_statistic( data['pressure'], # 分组依据:深度 data['temperature'], # 计算均值的变量:温度 statistic='mean', bins=bins ) # 3. 整理为目标表格格式 bin_midpoints = [(bins[i] + bins[i+1])/2 for i in range(len(bins)-1)] result_df = pd.DataFrame({ 'depth': bin_midpoints, 'temperature': binned_stats.statistic }) # 输出结果 print(result_df.to_markdown(index=False))
补充说明
- 如果你的深度列不是
pressure,替换为实际列名即可。 - 生成的区间会自动覆盖所有深度数据,确保每个数据点都能分到对应区间。
- 最终输出的
result_df完全匹配你期望的表格格式,depth列是区间中点,temperature列是对应区间的温度均值。
内容的提问来源于stack exchange,提问作者Rafael Bittencourt
相关产品推荐
相关产品推荐

