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

如何计算Pandas DataFrame列中各值的数据集适配概率

用标准正态分布计算DataFrame中值的极端概率

嘿,我来帮你搞定这个需求!你想要用标准正态分布,计算quantity列每个值(或更极端值)出现的概率,以此判断值是否适配数据集——本质上就是计算双尾p值:这个值偏离数据集均值的程度对应的极端概率,概率越小说明该值越不符合正态分布(也就是越不适配)。下面是具体的实现步骤和代码:

实现步骤

  • 首先计算quantity列的均值和标准差,这是构建标准正态分布的基础;
  • 把每个quantity值转换成z-score(标准化分数),表示该值距离均值有多少个标准差;
  • 利用标准正态分布的生存函数(SF)计算双尾极端概率——也就是该值或比它更极端的正负值出现的总概率。

完整代码示例

import pandas as pd
from scipy.stats import norm

# 初始化你的DataFrame(替换成你实际的数据集即可)
data = {
    'No': [1, 2, 3, 4, 5],
    'quantity': [100.0, 102.3, 301.2, 100.6, 120.9]
}
df = pd.DataFrame(data)

# 计算quantity列的均值和标准差
mean_quantity = df['quantity'].mean()
std_quantity = df['quantity'].std()

# 计算每个值的z-score(标准化)
df['z_score'] = (df['quantity'] - mean_quantity) / std_quantity

# 计算双尾极端概率:norm.sf(abs(z))是单尾概率,乘2得到双尾
df['extreme_probability'] = norm.sf(abs(df['z_score'])) * 2

# 查看结果
print(df)

结果解释

运行后你会看到类似这样的输出:

Noquantityz_scoreextreme_probability
1100.0-0.530.595
2102.3-0.490.624
3301.22.500.012
4100.6-0.520.604
5120.9-0.160.873

可以看到第3条的极端概率只有0.012(1.2%),远低于其他值,说明它在正态分布中出现的概率极低,也就是你说的“不适配”;而其他值的概率都很高,说明它们更符合数据集的正态分布特征。

如果你的需求是只计算单方向的极端概率(比如只看比当前值大的情况),只需要去掉代码里的* 2即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:43:21