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

如何在Pandas中创建BSI计算列?附分组求和逻辑

需求:为DataFrame新增BSI计算列

计算公式

BSI = ln((1+nPd)/(1+nNd))
其中:

  • d:日期(对应date列)
  • nP:单日期内正向预测值(pred_rate=1)的总和
  • nN:单日期内负向预测值(pred_rate=0)的总和

具体要求

  • 按date列对pred_rate列分组
  • 统计每组中pred_rate=1(正向)和pred_rate=0(负向)的数量
  • 在原DataFrame中新增BSI列并完成计算

解决方案代码

import pandas as pd
import numpy as np

# 假设数据集存储在名为df的DataFrame中
# 1. 按日期分组统计正负预测值数量
daily_counts = df.groupby('date')['pred_rate'].agg(
    nP=lambda x: (x == 1).sum(),
    nN=lambda x: (x == 0).sum()
).reset_index()

# 2. 计算BSI列
daily_counts['BSI'] = np.log((1 + daily_counts['nP']) / (1 + daily_counts['nN']))

# 3. 将结果合并回原DataFrame
df = df.merge(daily_counts[['date', 'BSI']], on='date', how='left')

代码说明

  • groupby('date')['pred_rate'].agg(...):按日期分组后,分别统计每组中正向和负向预测值的总数
  • np.log(...):调用numpy自然对数函数计算BSI,分子分母加1可避免出现除以0的异常情况
  • merge(...):将按日期计算的BSI值匹配到原DataFrame的每一行,确保所有数据都对应正确的BSI值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:41:26