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

如何将按工作日统计的true_or_false列1值计数纳入statsmodels OLS回归模型?

解决方法:先聚合统计再构建OLS回归

你的问题核心是当前的OLS模型是针对单个样本的true_or_false值(0/1)做回归,但你实际需要的是针对每个工作日的1的总计数来分析工作日的影响。所以第一步需要先对原始数据做聚合统计,再用聚合后的结果构建回归模型。

步骤1:聚合统计每个工作日的1的数量

首先,我们需要按weekday分组,统计每个工作日中true_or_false列里1的出现次数。因为true_or_false是0/1数值,直接对该列求和就能得到1的数量:

import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols

# 假设你的原始DataFrame是df
# 按weekday分组,统计1的数量并重置索引
count_df = df.groupby('weekday')['true_or_false'].sum().reset_index(name='count_ones')

# 可选:确保0-6所有工作日都被包含(避免某个工作日无数据时被遗漏)
count_df = count_df.set_index('weekday').reindex(range(7)).fillna(0).reset_index()

这段代码会生成一个新的DataFramecount_df,包含两列:

  • weekday:0到6的工作日编号
  • count_ones:对应工作日中1的出现次数

步骤2:用聚合数据构建OLS回归

现在用count_ones作为因变量,weekday作为自变量(可以保留分类变量形式,和你原来的写法一致)构建回归模型:

# 构建OLS模型并拟合
fit = ols('count_ones ~ C(weekday)', data=count_df).fit()

# 输出回归结果摘要
print(fit.summary())

额外说明

  1. 分类变量vs连续变量:

    • 你原来用C(weekday)是把工作日当作分类变量,回归结果会给出每个工作日相对于基准类别(默认是weekday=0)的1的数量差异。
    • 如果想把工作日当作连续变量(比如假设工作日从0到6是线性变化的),可以去掉C(),直接用公式count_ones ~ weekday,此时回归系数表示每增加一个工作日编号,1的数量的平均变化量。
  2. 如果需要分析比例而非计数:
    如果你关心的是每个工作日中1的占比(而不是绝对数量),可以把sum()换成mean(),得到每个工作日的1的比例,再做回归:

    prop_df = df.groupby('weekday')['true_or_false'].mean().reset_index(name='proportion_ones')
    fit = ols('proportion_ones ~ C(weekday)', data=prop_df).fit()
    

    不过这里要注意,比例数据更适合用广义线性模型(GLM)比如Logit模型,但如果坚持用OLS也是可行的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:17:51