You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R计算DataFrame各列基于正态分布的单元格概率值

解决方案

你可以使用pandas处理DataFrame,结合scipy.stats中的正态分布工具来实现需求,步骤如下:

1. 导入依赖库

import pandas as pd
from scipy.stats import norm

2. 构造你的DataFrame

根据你提供的数据创建示例DataFrame(如果已有现成DataFrame可跳过此步):

df = pd.DataFrame(
    {
        "Con1": [45, 23, 67, 22, 5],
        "Con2": [576, 1234, 345, 44, 567],
        "Con3": [None, None, None, None, None],
        "Con4": [None, None, None, None, None]
    },
    index=[1, 2, 3, 4, 5]
)

3. 定义处理函数

编写一个函数,对单列数据计算均值、标准差,再替换为对应正态分布的累积概率(CDF,取值范围0-1,与你的示例匹配):

def replace_with_norm_prob(col):
    # 计算列的均值和样本标准差
    col_mean = col.mean()
    col_std = col.std()
    
    # 跳过全空列或标准差为0的列(避免计算错误)
    if col.isna().all() or col_std == 0:
        return col
    
    # 计算每个值的正态累积分布概率
    return norm.cdf(col, loc=col_mean, scale=col_std)

4. 应用函数到整个DataFrame

对每列应用上述函数,得到结果:

result_df = df.apply(replace_with_norm_prob)

结果示例

运行后result_df的输出大致如下(数值为近似值,与你的示例逻辑一致):

Con1      Con2  Con3  Con4
1  0.70500  0.456000   NaN   NaN
2  0.32800  0.923000   NaN   NaN
3  0.93700  0.189000   NaN   NaN
4  0.31600  0.000123   NaN   NaN
5  0.06300  0.438000   NaN   NaN

补充说明

  • 如果你需要的是**概率密度函数(PDF)**而非累积概率,只需将norm.cdf替换为norm.pdf即可,但PDF值可能大于1,不符合你示例的0-1范围。
  • 函数中加入了对全空列、标准差为0列的判断,避免出现除以0或无效计算的错误。

内容的提问来源于stack exchange,提问作者DANY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 08:39:46