百万级数据集下,如何用Pandas DataFrame高效生成事件状态列?
高效处理大型事件数据集的状态标记方案
针对几十万行的大型数据集,用iterrows()逐行处理效率极低,以下是基于pandas矢量化操作的高效解决方案,完全规避逐行循环,处理速度会有数量级的提升:
实现步骤
- 生成事件增量列:识别
Event字段中的start/complete事件,分别对应+1/-1,空值则为0 - 计算增量列的累计和,直接得到当前正在进行的事件数量
NicerYetHowMany - 根据事件数量生成
IsEventHappening?标记:数量大于0时为"Yes",否则为"No"
代码实现
import pandas as pd # 假设原始数据集存储在DataFrame df中 # 1. 创建事件增量列 df['event_delta'] = df['Event'].apply( lambda x: 1 if 'start' in str(x) else (-1 if 'complete' in str(x) else 0) ) # 2. 计算累计和得到当前事件数 df['NicerYetHowMany'] = df['event_delta'].cumsum() # 3. 生成事件状态标记 df['IsEventHappening?'] = df['NicerYetHowMany'].map(lambda x: 'Yes' if x > 0 else 'No') # 清理中间列(可选) df = df.drop('event_delta', axis=1)
效果验证
用你提供的示例数据测试,运行后会完全匹配目标DataFrame的结果:
| Time | Event | IsEventHappening? | NicerYetHowMany |
|---|---|---|---|
| 0 | No | 0 | |
| 4 | Event1start | Yes | 1 |
| 13 | Event2start | Yes | 2 |
| 16 | Event1complete | Yes | 1 |
| 23 | Event2complete | No | 0 |
内容的提问来源于stack exchange,提问作者Jennifer G
相关产品推荐
相关产品推荐

