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

如何用Python实现Pandas DataFrame多列与指定列的批量比较替换?

Pandas 按行比较并替换值的实现方案

核心思路

通过Pandas的向量化操作(避免低效的逐行循环),针对除C、D外的所有列,逐行与该行的C、D值比较,按规则替换为指定字符串,且支持任意数量的待处理列。

方法一:循环列+numpy.select(直观易读)

这种方式代码逻辑清晰,适合快速理解和调试:

import pandas as pd
import numpy as np

# 生成示例DataFrame(包含任意数量待处理列)
df = pd.DataFrame({
    'A': [10, 25, 5, 30],
    'B': [15, 18, 22, 8],
    'C': [12, 20, 10, 15],
    'D': [20, 28, 25, 25],
    'E': [22, 19, 8, 26],
    'F': [9, 30, 26, 14]
})

# 获取除C、D外的所有待处理列
cols_to_process = df.columns.difference(['C', 'D'])

# 逐列处理
for col in cols_to_process:
    # 定义三个判断条件
    conditions = [
        df[col] < df['C'],
        (df[col] >= df['C']) & (df[col] <= df['D']),
        df[col] > df['D']
    ]
    # 对应条件的替换值
    choices = ['smaller', 'between', 'bigger']
    # 执行替换
    df[col] = np.select(conditions, choices, default='between')

方法二:数组广播(高效批量处理)

当待处理列数量较多时,这种方式通过numpy的广播机制一次性处理所有列,效率更高:

import pandas as pd
import numpy as np

# 生成示例DataFrame
df = pd.DataFrame({
    'A': [10, 25, 5, 30],
    'B': [15, 18, 22, 8],
    'C': [12, 20, 10, 15],
    'D': [20, 28, 25, 25],
    'E': [22, 19, 8, 26],
    'F': [9, 30, 26, 14]
})

cols_to_process = df.columns.difference(['C', 'D'])

# 提取待处理列的数值矩阵,以及C、D的广播数组
values = df[cols_to_process].values
c_vals = df['C'].values[:, np.newaxis]  # 转为列向量实现广播
d_vals = df['D'].values[:, np.newaxis]

# 批量生成结果矩阵
result = np.where(
    values < c_vals, 'smaller',
    np.where((values >= c_vals) & (values <= d_vals), 'between', 'bigger')
)

# 将结果赋值回原DataFrame
df[cols_to_process] = result

结果示例

执行上述代码后,DataFrame会被更新为:

A       B   C   D        E       F
0  between  between  12  20   bigger  smaller
1   smaller  between  20  28  between   bigger
2   smaller  between  10  25   smaller   bigger
3   bigger  smaller  15  25   bigger  smaller

注意事项

  • 确保C、D列和待处理列均为数值型数据,否则会出现比较错误。
  • 若数据中存在NaN,可在条件中添加df[col].isna(),并设置对应的替换值(比如'missing')。
  • 两种方法均支持任意数量的待处理列,无需修改核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:57:35