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

在Python中基于多条件计算行程终点的条件概率

多条件下终点到达的条件概率计算方法

要计算给定星期几(day_of_week)和时段(period_of_day)时,到达指定终点(end_point)的条件概率(即$P(end_point | day_of_week, period_of_day)$),可以用以下两种简洁的实现方式:

方法一:直接分组归一化计数

这是最直观的方式,通过按两个条件分组后,直接计算组内各终点的占比:

# 按星期几+时段分组,计算组内各终点的归一化占比(即条件概率)
cond_prob = df.groupby(['day_of_week', 'period_of_day'])['end_point'].value_counts(normalize=True)

# 可选:调整索引顺序,让end_point作为第一级索引,和你原单条件结果格式对齐
cond_prob = cond_prob.swaplevel(0, 2).sort_index()

执行后结果示例(对应你的测试DataFrame):

end_point  day_of_week  period_of_day
Station_1  0            afternoon       1.000000
           2            morning         1.000000
Station_2  0            night           0.500000
           1            evening         1.000000
           1            noon            1.000000
Station_3  0            night           0.500000
           1            morning         1.000000
dtype: float64

方法二:分步计算联合计数与条件总计数

如果你想沿用原单条件的分步思路,可以先统计联合出现次数,再除以对应条件的总行程数:

# 1. 统计(end_point, day_of_week, period_of_day)的联合出现次数
joint_counts = df.groupby(['end_point', 'day_of_week', 'period_of_day']).size()

# 2. 统计(day_of_week, period_of_day)组合的总行程数
cond_total = df.groupby(['day_of_week', 'period_of_day']).size()

# 3. 计算条件概率:联合计数除以对应条件的总行程数
cond_prob = joint_counts / cond_total.reindex(joint_counts.index.droplevel(0))

这个方法得到的结果和方法一完全一致,适合需要明确拆解计算逻辑的场景。

结果验证示例

比如测试DataFrame中:

  • 当day_of_week=0且period_of_day=night时,共有2条行程,终点分别是Station_2和Station_3,因此两者的条件概率各为0.5,和结果一致。
  • 当day_of_week=1且period_of_day=noon时,只有1条行程,终点为Station_2,因此概率为1.0,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:30:55