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

Pandas如何识别DataFrame序列中无对应前置A的异常B行

解决方案

要找出所有无对应前置A的异常B行,核心逻辑是按序列顺序累计A、B的出现次数:当某一行是B,且截止到该行的累计B数量大于累计A数量时,该行就是没有匹配前置A的异常行。

  1. 首先保证筛选出的子集顺序和业务要求的序列顺序一致,默认按原数据索引排序即可,如果需要按时间列排序可以调整排序规则:
# 筛选A、B行并保证顺序正确
subset = df[df.columntype.isin(['A', 'B'])].sort_index()
# 若需按时间排序替换为:subset = df[df.columntype.isin(['A', 'B'])].sort_values('timeframe')
  1. 计算累计计数并筛选异常行:
# 逐行累计A、B的出现次数
subset['cum_A'] = (subset['columntype'] == 'A').cumsum()
subset['cum_B'] = (subset['columntype'] == 'B').cumsum()

# 提取所有异常B行
abnormal_b_rows = subset[
    (subset['columntype'] == 'B') & (subset['cum_B'] > subset['cum_A'])
]

如果不需要保留累计计数字段,在结果后调用.drop(columns=['cum_A', 'cum_B'])即可清理多余列。

逻辑说明

正常的A-B交替序列中,任意位置的累计A数量永远大于等于累计B数量:

  • 序列开头是A时,累计A=1,累计B=0,符合要求
  • 匹配到对应B时,累计A=1,累计B=1,两者相等,符合要求
  • 如果出现多余的B,累计B会超过累计A,此时这个B没有可匹配的前置A,就是异常行

你给出的样例数据中所有B都能匹配到前置A,运行代码不会返回异常行;如果在序列开头、或者连续B的位置出现多余B,代码会精准定位到这些行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:27:28