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

为何双列索引的Pandas DataFrame.loc表现异常?

Pandas双列MultiIndex使用.loc赋值的特殊行为解析

这是因为Pandas的.loc在处理双列MultiIndex时,参数解析逻辑和单列/三列索引存在差异:

当你执行df.loc[123, 'a'] = [1]时,Pandas会默认将第一个参数123视为行索引的第一层级,第二个参数'a'判定为列名,而非行索引的第二层级——这就导致它新增了一列'a',而非在MultiIndex的第二层级添加'a'并给val列赋值。

而单列索引时,.loc的第二个参数只能是列名;三列索引时,传入的三个参数会被自动识别为三个行索引层级(此时仅存在val一列,不存在参数歧义),所以行为符合预期。

解决方法

要明确指定双列MultiIndex的两个层级,需要把行索引用元组包裹,告诉Pandas这两个值属于行索引的两个层级,而非行+列的组合:

import pandas as pd

df = pd.DataFrame(columns=['id', 'idx1', 'val'])
df = df.set_index(['id', 'idx1'])
# 用元组指定双列索引的两个层级,再指定目标列val
df.loc[(123, 'a'), 'val'] = 1

执行后结果符合预期:

val
id  idx1        
123    a   1

如果是单个标量赋值,也可以使用性能更优的.at方法:

df.at[(123, 'a'), 'val'] = 1

内容的提问来源于stack exchange,提问作者R. Javid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:45:52