如何筛选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)
代码解释
- 重置索引:如果你的DataFrame有缺失的行索引,
shift()操作会出错,所以先重置索引确保行连续。 - 移位操作:
shift(-1)会把下一行的type和unique_id移到当前行,这样我们可以直接在同一行做条件判断。 - 条件筛选:同时满足三个条件的行就是我们要找的"起始行"(Open行)。
- 提取行对:把每个符合条件的Open行,加上它的下一行(Close/Cancel行),组合成完整的行对结果。
这样处理后,result_df里就只保留了所有符合要求的连续操作对啦!
内容的提问来源于stack exchange,提问作者jonnyblue8
相关产品推荐
相关产品推荐

