如何计算加权循环?基于Pandas数据帧的分箱加权平均实现
IBI分箱加权平均计算实现
问题背景
给定以下数据帧:
import pandas as pd df = pd.DataFrame({ 'IBI_msec': [652, 618, 654], 'rate': [92.02, 97.09, 91.74] })
需要实现分箱计算逻辑:
- 若某行
IBI_msec > 500,当前分箱值bins取该行rate,剩余时长(IBI_msec - 500)计入下一个分箱 - 后续分箱需用上一行剩余时长与当前行的部分时长凑够500毫秒,分箱值为两者的加权平均:
(剩余时长×上一行rate + 所需时长×当前行rate)/500 - 注:数据中不会出现
IBI_msec小于500的情况
期望最终输出:
IBI_msec rate bins 0 652 92.02 92.02 1 618 97.09 95.55 2 654 91.74 94.63
循环实现方案
# 初始化剩余时长变量和分箱结果列表 remaining_ibi = 0 bins_results = [] for idx, row in df.iterrows(): current_ibi = row['IBI_msec'] current_rate = row['rate'] if remaining_ibi > 0: # 计算当前分箱需要从该行取的时长 required_ibi = 500 - remaining_ibi # 计算加权平均分箱值 bin_value = (remaining_ibi * df.loc[idx-1, 'rate'] + required_ibi * current_rate) / 500 bins_results.append(round(bin_value, 2)) # 更新剩余时长:当前IBI减去已使用的部分 remaining_ibi = current_ibi - required_ibi else: # 无剩余时长,直接取当前rate作为分箱值 bins_results.append(current_rate) # 计算当前行剩余的IBI时长 remaining_ibi = current_ibi - 500 # 将分箱结果添加到原数据帧 df['bins'] = bins_results print(df)
代码说明
remaining_ibi用于存储上一行未耗尽的IBI时长,初始值为0- 遍历数据帧每一行时:
- 若存在剩余时长,先计算需要从当前行提取的时长以凑够500毫秒,通过加权平均得到当前分箱值,再更新剩余时长
- 若无剩余时长,直接将当前行的
rate作为分箱值,同时计算当前行使用500毫秒后剩余的时长
- 最后将分箱值保留两位小数后添加到原数据帧,输出结果与预期一致
内容的提问来源于stack exchange,提问作者Olivia
相关产品推荐
相关产品推荐

