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

统计Pandas DataFrame事件出现次数并转化为对应列的最优方法

最优实现方案(基于Pandas,全向量化操作,无循环,性能远高于自定义遍历)

两种方案均为Pandas原生C实现的向量化操作,处理千万级行数据耗时仅为Python自定义循环的1/100~1/1000,完全适配大体量Monte Carlo模拟数据集的处理需求。

方案1:pd.crosstab 单步实现

适合仅需要统计事件计数的场景,代码最简洁:

import pandas as pd

# 自定义需要统计的目标事件列表,确保未出现的事件也能生成对应列
TARGET_EVENTS = ["A", "B", "C"]

# 生成统计结果,缺失事件自动填充0
result = pd.crosstab(df["Run_Number"], df["Event"]).reindex(columns=TARGET_EVENTS, fill_value=0).reset_index()
# 重命名列符合输出要求
result.columns = ["Run_Number", "A_cnt", "B_cnt", "C_cnt"]

方案2:get_dummies + groupby 组合实现

适合需要后续拓展统计逻辑的场景,灵活性更高:

import pandas as pd

TARGET_EVENTS = ["A", "B", "C"]

# 对Event列做独热编码,仅保留目标事件列,非目标事件自动过滤
dummies = pd.get_dummies(df["Event"]).reindex(columns=TARGET_EVENTS, fill_value=0)
# 按Run_Number分组求和得到各事件计数
result = pd.concat([df["Run_Number"], dummies], axis=1).groupby("Run_Number", as_index=False).sum()
# 重命名列符合输出要求
result.columns = ["Run_Number", "A_cnt", "B_cnt", "C_cnt"]
拓展说明
  • 若目标事件列表不固定,可通过df["Event"].unique()动态获取所有事件值,替换固定的TARGET_EVENTS即可
  • 若不需要过滤非目标事件,直接去掉reindex步骤,会自动生成所有出现过的事件的计数列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:09:03