Python中如何按距离区间提取Height的max、min与average并生成新DataFrame?
没问题,这事儿用Pandas就能轻松搞定,我给你一步步拆解方案:
核心思路
用Pandas的pd.cut()将连续的Distance值划分成指定宽度的区间,再通过分组聚合计算每个区间内Height的统计值,最后整理成你需要的格式。
完整代码实现
假设你的原始DataFrame名为df,包含Distance(m)和Height(m)两列,代码如下:
import pandas as pd import numpy as np # 1. 定义分组区间宽度 bin_width = 0.04439 # 生成覆盖所有Distance值的区间边界(从0开始,步长0.04439,直到超过最大Distance值) bins = np.arange(0, df['Distance(m)'].max() + bin_width, bin_width) # 2. 给原始数据添加分组标签(include_lowest=True确保第一个区间包含0值) df['interval'] = pd.cut(df['Distance(m)'], bins=bins, include_lowest=True) # 3. 分组聚合,计算每个区间的Height最大值、最小值、平均值 grouped_stats = df.groupby('interval')['Height(m)'].agg( Height_max=('max'), Height_min=('min'), Height_average=('mean') ).reset_index() # 4. 整理结果格式:添加区间序号、计算区间中点作为distance代表值 grouped_stats['Interval'] = range(1, len(grouped_stats) + 1) # 提取区间左右边界,计算中点(对应你示例里的distance列) grouped_stats['distance(m)'] = grouped_stats['interval'].apply( lambda x: (x.left + x.right) / 2 ) # 5. 调整列顺序并保留需要的列,匹配你要的输出格式 result_df = grouped_stats[[ 'Interval', 'distance(m)', 'Height_max', 'Height_min', 'Height_average' ]] # 给统计列加上单位后缀 result_df.columns = [ 'Interval', 'distance(m)', 'Height_max(m)', 'Height_min(m)', 'Height_average(m)' ] # 查看最终结果 print(result_df)
关键细节说明
pd.cut()的include_lowest=True:确保第一个区间(0到0.04439)能包含Distance=0的第一个数据点,避免数据遗漏。- 区间中点计算:用区间左右边界的平均值作为
distance(m)列的值,和你示例里的格式一致;如果需要显示完整区间范围(比如[0, 0.04439]),直接保留interval列即可。 - 分组数量验证:0到0.81m按0.04439m宽度分组,刚好是18个区间(0.81 / 0.04439 ≈ 18.25,最后一个区间会包含剩余的少量数据,不影响统计结果)。
内容的提问来源于stack exchange,提问作者Master03 Skywalker
相关产品推荐
相关产品推荐

