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

如何替换DataFrame每列中首次出现的指定值(替换2为4)

问题需求

现有如下DataFrame,需要将每列中首次出现的数值2替换为4,其余的2保持不变:

5  2  9  10  9
2  9  2   5  3
2  9  2   2  0
2  1  1   2  2

尝试用argmax()和idxmax()方法时,所有的2都被替换了,期望输出如下:

5  4  9  10  9
4  9  4   5  3
2  9  2   4  0
2  1  1   2  4
解决方法

核心思路是精准定位每列中第一个值为2的位置,仅替换该位置的元素。

1. 构造示例DataFrame

先把原始数据转为Pandas DataFrame:

import pandas as pd

data = [
    [5, 2, 9, 10, 9],
    [2, 9, 2, 5, 3],
    [2, 9, 2, 2, 0],
    [2, 1, 1, 2, 2]
]
df = pd.DataFrame(data)

2. 定位每列首个2的位置

利用布尔矩阵结合idxmax(),获取每列中第一个值为2的行索引:

first_2_indices = (df == 2).idxmax()

3. 替换指定位置元素

遍历每一列,仅修改对应行索引位置的2为4:

for col in df.columns:
    row_idx = first_2_indices[col]
    # 额外判断避免列中无2的情况
    if df.loc[row_idx, col] == 2:
        df.loc[row_idx, col] = 4

最终输出

执行后得到的结果与期望一致:

0  1  2   3  4
0  5  4  9  10  9
1  4  9  4   5  3
2  2  9  2   4  0
3  2  1  1   2  4

错误原因说明

之前直接用df[df == 2] = 4会替换所有2,而通过idxmax()定位单个坐标再修改,才能实现仅替换首次出现的2的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:22:40