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

如何用一行代码批量修改Pandas DataFrame指定单元格的值?

问题描述

现有如下构造的Pandas DataFrame:

import pandas as pd
df = pd.DataFrame(
    [[1, 2, 4], [1, 3, 1], [4, 6, 2]],
    columns=["A", "B", "C"],
    index=["Foo", "Bar", "Baz"],
)

输出:

A  B  C
Foo  1  2  4
Bar  1  3  1
Baz  4  6  2

还有一个通过标签定位指定单元格的Series:

series = pd.Series(data=["Baz", "Foo"], index=["A", "C"])

输出:

A    Baz
C    Foo
dtype: object

需求是把这些指定单元格的值乘以-1,得到目标DataFrame:

A  B  C
Foo  1  2 -4
Bar  1  3  1
Baz -4  6  2

已知可以用循环实现:

for col, index in series.items():
    df.loc[[index], [col]] = df.loc[[index], [col]] * -1

想问有没有一行代码的批量实现方式?

一行代码实现方案

当然可以,这里提供几种简洁的实现方式:

方法1:直接用df.loc精准定位修改

df.loc[series.values, series.index] *= -1

series.values是要修改的行索引列表(["Baz", "Foo"]),series.index是对应的列名列表(["A", "C"]),df.loc会直接定位到这两个交叉的单元格,一步完成乘-1的操作。

方法2:结合df.lookup提取值后更新

df.loc[series.values, series.index] = df.lookup(series.values, series.index) * -1

df.lookup能根据行和列的对应关系提取指定单元格的值,乘-1后再赋值回原位置,效果和方法1完全一致。

方法3:布尔掩码方式(需注意适用场景)

df[(df.index.isin(series.values)) & (df.columns.isin(series.index))] *= -1

⚠️ 注意:如果DataFrame里存在其他行+列的组合同时满足「行索引在series.values里、列名在series.index里」,这种方法会误修改这些额外的单元格,所以更推荐前两种精准匹配的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:22:45