如何在Pandas中比对同行及下一行列值并筛选目标行
解决方法
步骤1:构造DataFrame
先将你的数据转换为pandas DataFrame:
import pandas as pd data = { 'Column A': ['LONDON', 'LONDON', 'LONDON', 'LONDON', 'LONDON', 'LONDON', 'ROME', 'ROME', 'ROME', 'ROME', 'LONDON', 'LONDON', 'LONDON', 'LONDON'], 'Column B': ['MADRID', 'MADRID', 'MADRID', 'MADRID', 'MADRID', 'MADRID', 'HAMBURG', 'HAMBURG', 'HAMBURG', 'HAMBURG', 'MADRID', 'MADRID', 'MADRID', 'MADRID'], 'Column C': ['LONDON', 'LONDON', 'LONDON', 'MADRID', 'MADRID', 'MADRID', 'ROME', 'HAMBURG', 'HAMBURG', 'HAMBURG', 'LONDON', 'LONDON', 'MADRID', 'MADRID'] } df = pd.DataFrame(data)
步骤2:定义筛选条件
创建掩码筛选出满足两个条件的行:
- 当前行
Column A值等于Column C值 - 当前行
Column B值等于下一行Column C值
使用shift(-1)获取下一行的Column C数据:
mask = (df['Column A'] == df['Column C']) & (df['Column B'] == df['Column C'].shift(-1))
步骤3:提取目标行
收集符合条件的行及其下一行的索引,去重排序后提取数据:
# 获取所有符合条件的行索引 matched_idx = mask[mask].index.tolist() # 添加对应下一行的索引 target_idx = matched_idx + [idx + 1 for idx in matched_idx] # 去重并保持原顺序 target_idx = sorted(list(set(target_idx))) # 提取结果 result = df.loc[target_idx]
最终结果
打印result会得到你需要的输出:
Column A Column B Column C 2 LONDON MADRID LONDON 3 LONDON MADRID MADRID 6 ROME HAMBURG ROME 7 ROME HAMBURG HAMBURG 11 LONDON MADRID LONDON 12 LONDON MADRID MADRID
内容的提问来源于stack exchange,提问作者just_learning
相关产品推荐
相关产品推荐

