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

Python中非标量对象分箱及事件A相对变量X的条件概率绘图方案

需求实现方案

你可以直接基于pandas原生功能实现需求,无需引入额外专用库,核心逻辑为分箱+分组聚合两步:

  • 用pandas.cut(等宽分箱)或pandas.qcut(等频分箱)生成X的分箱标签列
  • 按分箱标签分组计算每个分箱的总样本数N、事件A发生数p,再按规则计算柱高即可

可运行示例代码

import pandas as pd
import matplotlib.pyplot as plt

# 示例数据构造,替换为你自己的数据集即可
df = pd.DataFrame({
    "x": [1.2, 3.5, 2.1, 4.8, 5.2, 0.9, 3.3, 6.1, 2.9, 4.4]*10,
    "a": [1,0,1,0,1,0,1,0,1,0]*10
})

# 1. 对X做分箱,bins可传入整数(分箱数量)或自定义分箱边界列表
df["x_bin"] = pd.cut(df["x"], bins=5)

# 2. 按分箱分组聚合计算指标
bin_result = df.groupby("x_bin")["a"].agg(
    N="count",
    p="sum"
).reset_index()

# 3. 计算柱高,处理分母为0的边界情况
bin_result["height"] = bin_result.apply(
    lambda row: row["p"]/(row["N"] - row["p"]) if row["N"] != row["p"] else 999, # 全为正样本时可自定义填充值
    axis=1
)

# 4. 绘制柱形图
plt.bar(
    x=bin_result["x_bin"].astype(str),
    height=bin_result["height"]
)
plt.xlabel("X分箱区间")
plt.ylabel("p/(N-p)")
plt.xticks(rotation=30)
plt.tight_layout()
plt.show()

补充说明

如果有更复杂的分箱需求(比如按业务规则自定义分箱边界),直接修改pd.cut的bins参数即可,聚合逻辑也可以根据你的实际统计规则灵活调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:45:02