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

如何在Pandas中遍历行并在两列相等时应用函数

How to apply a specific function to rows where 'start' equals 'end' in a pandas DataFrame?

Problem Statement

我有如下结构的DataFrame:

import pandas as pd
inp = [{'ID':"a", 'start':100, 'end': 200}, {'ID':"b", 'start':250, 'end': 290}, {'ID':"c", 'start':300, 'end': 300}, {'ID':"d", 'start':350, 'end': 500}, {'ID':"e", 'start':600, 'end': 600}, {'ID':"f", 'start':700, 'end': 900}]
df = pd.DataFrame(inp)
df[['ID','start','end']]

输出的DataFrame如下:

ID  start  end
0  a    100  200
1  b    250  290
2  c    300  300
3  d    350  500
4  e    600  600
5  f    700  900

我希望遍历该DataFrame的每一行,当start列与end列数值相等时对该行应用指定函数,请问该如何实现?


Solutions

首先先定义一个示例的指定函数,你可以根据自己的需求修改逻辑:

def my_custom_function(row):
    # 示例操作:给ID添加后缀,你可以替换成自己的业务逻辑
    row['ID'] = f"{row['ID']}_updated"
    # 也可以添加新列、修改其他字段等
    row['status'] = 'same_start_end'
    return row

方法1:布尔索引 + 定向应用(推荐,高效)

这种方法先筛选出符合条件的行,只对这些行执行函数,避免遍历整个数据集,在数据量大的时候性能优势明显:

# 生成筛选条件:start和end相等的行
condition_mask = df['start'] == df['end']

# 对符合条件的行应用函数,再赋值回原DataFrame
df.loc[condition_mask] = df.loc[condition_mask].apply(my_custom_function, axis=1)

执行后,你会看到ID为c和e的行已经被修改,新增了status列,其他行保持原样。

方法2:遍历所有行并判断(适合小数据集)

如果你的数据集很小,也可以直接用apply遍历每一行,通过条件判断决定是否执行函数:

df = df.apply(
    lambda row: my_custom_function(row) if row['start'] == row['end'] else row,
    axis=1
)

这种写法更直观,但会遍历每一行,数据量大时效率不如方法1,所以优先推荐第一种方案。

补充:如果函数仅生成单个值

如果你的函数只是计算某个单一值(比如基于start生成新字段),可以更简洁地赋值:

def calculate_value(row):
    return row['start'] * 3

# 直接给符合条件的行的新列赋值
df.loc[condition_mask, 'calculated_col'] = df.loc[condition_mask].apply(calculate_value, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:25:03