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

如何筛选DataFrame中满足字符串条件的连续行对

筛选符合条件的连续行对解决方案

我来帮你搞定这个需求!要从你的DataFrame里筛选出Open后跟Close或Cancel的连续行对(且对应同一个unique_id),用Pandas的移位操作就能轻松实现,咱们一步步来:

思路说明

核心思路是对比当前行和下一行的两个关键信息:

  • 当前行的type必须是Open
  • 下一行的type必须是Close或Cancel
  • 两行的unique_id必须一致(确保是同一个实体的操作对)

代码实现

假设你的DataFrame变量名为df,执行以下代码即可:

import pandas as pd

# 先重置索引,确保行是连续的(避免原索引不连续导致移位出错)
df = df.reset_index(drop=True)

# 创建新列,存储下一行的type和unique_id
df['next_type'] = df['type'].shift(-1)
df['next_unique_id'] = df['unique_id'].shift(-1)

# 定义筛选条件:Open开头,后跟Close/Cancel,且unique_id一致
filter_condition = (df['type'] == 'Open') & \
                   (df['next_type'].isin(['Close', 'Cancel'])) & \
                   (df['unique_id'] == df['next_unique_id'])

# 筛选出所有符合条件的"起始行"(也就是Open行)
valid_open_rows = df[filter_condition]

# 提取对应的完整行对:把每个Open行和它的下一行都收集起来
pair_indices = []
for idx in valid_open_rows.index:
    pair_indices.extend([idx, idx + 1])

# 生成最终的结果DataFrame(去重+排序,保证顺序正确)
result_df = df.loc[sorted(list(set(pair_indices)))]

# 查看结果
print(result_df)

代码解释

  1. 重置索引:如果你的DataFrame有缺失的行索引,shift()操作会出错,所以先重置索引确保行连续。
  2. 移位操作:shift(-1)会把下一行的type和unique_id移到当前行,这样我们可以直接在同一行做条件判断。
  3. 条件筛选:同时满足三个条件的行就是我们要找的"起始行"(Open行)。
  4. 提取行对:把每个符合条件的Open行,加上它的下一行(Close/Cancel行),组合成完整的行对结果。

这样处理后,result_df里就只保留了所有符合要求的连续操作对啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:36:03