如何对Pandas DataFrame执行逐元素运算以构建95%置信区间
双DataFrame逐元素计算95%置信区间的高效实现
利用Pandas原生向量化运算能力,无需循环即可完成逐元素的置信区间计算,实现方案如下:
首先补全示例代码缺失的依赖导入:
import pandas as pd import numpy as np import scipy.stats as st rows = (1, 2) col1 = ["mean_x", "mean_y"] col2 = ["std_x", "std_y"] data1 = ([10, 20], [5, 10]) data2 = ([1, 2], [0.5, 1]) df1 = pd.DataFrame(data1, index = rows, columns = col1) df2 = pd.DataFrame(data2, index = rows, columns = col2)
核心运算步骤:
- 计算95%双侧置信区间对应的Z临界值
z_critical = st.norm.ppf(0.975) - 对齐两个DataFrame的列名,保证均值和标准误按变量一一对应
df2.columns = df1.columns - 逐元素计算置信区间上下限
ci_low = df1 - z_critical * df2 ci_high = df1 + z_critical * df2 - 按需生成最终结果表:
- 单变量列存储(下限, 上限)元组格式
df_ci = pd.DataFrame({ col: list(zip(ci_low[col].round(2), ci_high[col].round(2))) for col in df1.columns }, index=df1.index)- 拆分上下限列的宽表格式
df_ci = ci_low.join(ci_high, lsuffix='_lower', rsuffix='_upper').sort_index(axis=1)
提示:如果两个DataFrame的索引、列顺序不是严格对应,可先执行
df1, df2 = df1.align(df2.rename(columns=lambda x: x.replace('std_', 'mean_')), join='inner')自动对齐行列,避免运算错误。
使用示例数据运行后,元组格式的输出结果如下:
| index | mean_x | mean_y |
|---|---|---|
| 1 | (8.04, 11.96) | (16.08, 23.92) |
| 2 | (4.02, 5.98) | (8.04, 11.96) |
内容的提问来源于stack exchange,提问作者Cooper
相关产品推荐
相关产品推荐

