Python DataFrame按±0.2mm距离区间分组求均值与标准差
按指定区间分组计算均值与标准差
步骤1:创建分组区间
首先根据需求生成±0.2mm的区间(每个区间宽度0.4mm),覆盖数据中distance in mm的范围:
import pandas as pd matrix = [[0,11,0],[0.99,25,1],[1.99,17,1],[0.1,6,0],[0.88,9,1] ] data = pd.DataFrame(matrix,columns=['distance in mm','Lithium','Calcium']) # 生成区间:从-0.2开始,步长0.4,到2.2结束(覆盖示例数据最大值1.99) bins = pd.interval_range(start=-0.2, end=2.2, freq=0.4) # 添加区间列 data['distance_bin'] = pd.cut(data['distance in mm'], bins=bins)
步骤2:分组聚合计算统计量
直接对区间列做groupby,然后用agg方法指定需要计算的均值和标准差:
# 分组计算Lithium和Calcium的均值、标准差 result = data.groupby('distance_bin').agg( lithium_mean=('Lithium', 'mean'), lithium_std=('Lithium', 'std'), calcium_mean=('Calcium', 'mean'), calcium_std=('Calcium', 'std') ).reset_index() # 查看结果 print(result)
结果说明
运行后会得到包含区间、各元素均值和标准差的DataFrame,示例输出如下:
distance_bin lithium_mean lithium_std calcium_mean calcium_std 0 [-0.2, 0.2] 8.5 3.535534 0.0 0.0 1 [0.2, 0.6] NaN NaN NaN NaN 2 [0.6, 1.0] 17.0 11.313708 1.0 0.0 3 [1.0, 1.4] NaN NaN NaN NaN 4 [1.4, 1.8] NaN NaN NaN NaN 5 [1.8, 2.2] 17.0 NaN 1.0 NaN
注:没有数据的区间会显示NaN,如果需要过滤掉这些空行,可以添加result = result.dropna()。
灵活调整区间
如果需要自定义区间中心或范围,比如想以数据中的每个唯一distance值为中心做±0.2的区间,可以用以下方式:
# 以每个唯一distance值为中心生成区间 unique_distances = data['distance in mm'].unique() custom_bins = [] for d in unique_distances: custom_bins.append((d-0.2, d+0.2)) # 转换为IntervalIndex custom_bins = pd.IntervalIndex.from_tuples(custom_bins, closed='left') # 分组聚合 custom_result = data.groupby(pd.cut(data['distance in mm'], bins=custom_bins)).agg( lithium_mean=('Lithium', 'mean'), lithium_std=('Lithium', 'std'), calcium_mean=('Calcium', 'mean'), calcium_std=('Calcium', 'std') ).reset_index()
这种方式会生成以每个现有distance值为中心的±0.2区间,适合需要匹配特定数据点的场景。
内容的提问来源于stack exchange,提问作者Van3
相关产品推荐
相关产品推荐

