更新多索引数据帧中的值



谁能给我解释一下这种行为?这是我的数据框架:

df = pd.DataFrame(
{
'key1' : ['f1', 'f1', 'f2', 'f2', 'f3'],
'key2' : ['fm1', 'fm2', 'fm1', 'fm2', 'fm1'],
'k' : np.random.rand(5),
'c' : [100, 200, 100, 150, 400],
})
df.set_index(["key1","key2"],inplace=True)

当我试图改变一个值时:

df.loc["f1","fm1"].loc["k"]=-999

什么也不会发生。df.loc["f1","fm1"].loc["k"]仍然是原来的值我想知道我做错了什么,我应该如何做到这一点?

使用一个元组并且只有一个loc:

>>> df.loc[("f1", "fm1"), "k"] = -999
>>> df
k    c
key1 key2                 
f1   fm1  -999.000000  100
fm2     0.082072  200
f2   fm1     0.119572  100
fm2     0.752586  150
f3   fm1     0.947604  400
>>> 

你的代码不工作的原因,是因为df.loc["f1", "fm1"]引用了一个对象,没有干扰原来的df,它返回一个全新的数据帧,并取代k的值,但它不取代它在df以及。

在pandas文档中阅读更多信息。

因为您试图更改来自数据框架的切片副本的值。为什么使用链式索引时赋值会失败?

期望的结果可以使用下面的代码来实现:

df["k"].loc["f1", "fm1"] = -999

相关内容

  • 没有找到相关文章

最新更新