首页 > 解决方案 > 更新多索引数据框中的值

问题描述

有人可以向我解释这种行为吗?这是我的数据框:

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"]仍然给出旧值我想知道我做错了什么,我应该如何实现这一点?

标签: pythonpandasdataframemulti-index

解决方案


使用一个元组并且只有一个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 文档中阅读更多关于它的信息。


推荐阅读