微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – pandas fillna inplace with multiindex

我有一个带有multiindex的数据框

       values                            observations
time       x1    x2    x3    x4   ...         x1    x2    x3    x4    ...

  t1     v1_1   nan  v3_1  v4_1   ...       o1_1   nan  o3_1  o4_1    ...
  t2     v1_2  v2_2   nan  v4_2   ...       o1_2  o2_2   nan  o4_2    ...

我试图用0来填充观察框架

df.loc[:,('observations')].fillna(value=0, inplace=True)

但这并没有填补df.当我采取切片并应用fillna时,它可以工作

dfx = df.loc[:,('observations')].fillna(value=0)

dfx的nans被0替换,我可以替换原来的部分

df.observations = dfx

我不清楚为什么第一种方法不起作用.看起来很奇怪.谁能在这里启发我?

解决方法:

对我来说工作:

df['observations'] = df['observations'].fillna(0)
print (df)
   values                   observations                  
     time    x1    x2    x3           x4    x1    x2    x3
t1   v1_1   NaN  v3_1  v4_1         o1_1     0  o3_1  o4_1
t2   v1_2  v2_2   NaN  v4_2         o1_2  o2_2     0  o4_2

我认为问题是loc无法正常工作.所以你可以使用:

df1 = df.loc[:,('observations')] 
df1.fillna(value=0, inplace=True)

一个解决方案是通过切片选择,但需要首先按sort_index对列名称进行排序:

df.sort_index(inplace=True, axis=1)
idx = pd.IndexSlice
df.loc[:, idx['observations',:]] = df.loc[:, idx['observations',:]].fillna(0)
print (df)
     observations                   values                  
time           x1    x2    x3    x4     x1    x2    x3    x4
t1           o1_1     0  o3_1  o4_1   v1_1   NaN  v3_1  v4_1
t2           o1_2  o2_2     0  o4_2   v1_2  v2_2   NaN  v4_2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐