pandas DataFrame如何新增列计算从首行到当前行的累计中位数
pandas DataFrame 累计中位数计算方案
你需要的是扩展窗口(expanding window)的中位数计算,pandas内置的expanding()方法可以直接满足需求,无需自行实现遍历逻辑。
完整可运行代码示例
import pandas as pd # 示例:构造测试DataFrame,实际使用时替换为你自己的数据集即可 df = pd.DataFrame({ "float_col": [1.5, 2.3, 0.9, 4.2, 3.7] # 对应你的float类型数值列 }) # 核心实现:新增累计中位数列,expanding()默认窗口范围为第1行到当前行 df["cum_median"] = df["float_col"].expanding().median() # 输出查看结果 print(df)
说明
- 把代码里的
float_col替换为你实际要计算的float列名即可直接使用 expanding()方法生成的窗口会随行索引向下逐步扩展,始终包含从首行到当前行的所有数据,完全符合「每一步基于当前全部已知数据计算」的要求- 该方法为pandas原生优化实现,计算效率远高于手动写for循环逐行计算
- 如果需要自定义中位数计算规则,可以用
expanding().apply()实现自定义逻辑,示例如下:
# 自定义中位数计算逻辑示例 def custom_median(window): sorted_win = sorted(window) n = len(sorted_win) return sorted_win[n//2] if n%2 ==1 else (sorted_win[n//2-1]+sorted_win[n//2])/2 df["cum_median_custom"] = df["float_col"].expanding().apply(custom_median, raw=True)
内容的提问来源于stack exchange,提问作者user3239711
相关产品推荐
相关产品推荐

