如何高效检测Pandas DataFrame中按钮从0变1的触发行?
高效检测按钮从0变为1的触发行(Pandas)
针对400万行、44列的大数据量场景,矢量化操作是最优选择,完全避免低效的apply逐行处理,具体步骤如下:
生成移位对比数据集
用shift(1)获取上一行的状态数据,实现当前行与上一行的逐列对比:prev_df = df.shift(1)注:移位后第一行的所有值为
NaN,后续对比会自动忽略该无效行。精准生成0→1的触发掩码
仅当「当前行状态为1」且「上一行状态为0」时,才判定为有效触发。通过矢量化布尔运算生成同维度的触发掩码:trigger_mask = (df == 1) & (prev_df == 0)掩码中
True对应的单元格,代表该列按钮在当前行完成了0→1的触发。提取触发行
- 获取所有至少有一个按钮触发的行:
trigger_rows = df[trigger_mask.any(axis=1)] - 查看单个按钮的具体触发位置(以
btn_col列为例):btn_trigger_indices = trigger_mask['btn_col'].loc[lambda x: x].index
- 获取所有至少有一个按钮触发的行:
性能优化建议
由于状态仅4种(0-3),可将所有列转成uint8类型,大幅降低内存占用并提升运算速度:df = df.astype('uint8')
内容的提问来源于stack exchange,提问作者Florian K
相关产品推荐
相关产品推荐

