更新多索引数据框中的值
updating a value in a multi index data frame
有人可以向我解释一下这种行为吗?
这是我的数据框:
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
没有干扰的对象,它 returns 一个全新的数据框并替换了k
值,但它也不会在 df
中替换它。
在 pandas 文档中阅读有关 here 的更多信息。
因为您正试图更改数据帧中切片副本的值。
在这里阅读:Why does assignment fail when using chained indexing?
使用下面的代码可以达到预期的效果:
df["k"].loc["f1", "fm1"] = -999
有人可以向我解释一下这种行为吗? 这是我的数据框:
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
没有干扰的对象,它 returns 一个全新的数据框并替换了k
值,但它也不会在 df
中替换它。
在 pandas 文档中阅读有关 here 的更多信息。
因为您正试图更改数据帧中切片副本的值。 在这里阅读:Why does assignment fail when using chained indexing?
使用下面的代码可以达到预期的效果:
df["k"].loc["f1", "fm1"] = -999