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

如何在Pandas中基于同行基准单元格对每行单元格应用函数?

解决Pandas中按同行基准值修改多列的问题

首先构造示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'a': [1, 1],
    'b': [2, 5],
    'benchmark': [1, 3]
})

方法一:按行apply处理(直观易读)

直接针对a、b列,按行判断每个值是否大于同行的benchmark,不满足则设为0,原地修改原列:

df[['a', 'b']] = df.apply(
    lambda row: [val if val > row['benchmark'] else 0 for val in [row['a'], row['b']]],
    axis=1,
    result_type='expand'
)
  • axis=1指定按行处理,每一行的row对象可以访问所有列的值
  • result_type='expand'将返回的列表展开为列,直接覆盖原a、b列

方法二:矢量化操作(性能优先,推荐大数据集)

利用Pandas的广播特性,无需循环,直接对整列进行条件判断,性能远高于逐行apply:

# 单列逐个处理
df['a'] = df['a'].where(df['a'] > df['benchmark'], 0)
df['b'] = df['b'].where(df['b'] > df['benchmark'], 0)

# 多列批量处理(更简洁)
df[['a', 'b']] = df[['a', 'b']].where(df[['a', 'b']] > df['benchmark'].values[:, None], 0)
  • where函数会保留满足条件的值,将不满足的替换为指定的0
  • df['benchmark'].values[:, None]将基准列转换为列向量,实现和a、b列的广播比较

处理后最终的DataFrame:

abbenchmark
0021
1053

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:35:23