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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:53:02