为什么Pandas DataFrame.loc与具有两列作为索引的DataFrame不同



我在用两列作为索引向pandas DataFrame添加行时遇到问题。这是我正在使用的代码:

df = pd.DataFrame(columns=['id', 'idx1', 'val'])
df = df.set_index(['id', 'idx1'])
df.loc[123, 'a'] = [1]

df变为:

val  a
id  idx1        
123       NaN  1

然而,我希望得到这个:

val 
id  idx1        
123    a   1

当我将索引的长度更改为三(或一(时,我得到了我所期望的。例如,如果我运行以下代码:

df = pd.DataFrame(columns=['id', 'idx1', 'idx2', 'val'])
df = df.set_index(['id', 'idx1', 'idx2'])
df.loc[123, 'a', 'b'] = [1]

df变为:

val
id  idx1 idx2     
123 a    b       1

将两列引用为索引时有什么不同吗?

您的数据帧为空。仅定义索引和列名称。那么熊猫应该如何知道你所说的df.loc[123, 'a'] = 1是什么意思呢?

  • 创建具有第一个索引123和列'a'的条目,或者
  • 使用123'a'作为多索引的两个级别

解决方案:

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

最新更新