Python 使用多索引替换

Python 使用多索引替换,python,pandas,Python,Pandas,我有一个多索引的数据帧 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 .

我有一个多索引的数据帧

       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。当我切一片涂上菲尔娜时,效果很好

dfx = df.loc[:,('observations')].fillna(value=0)
dfx将其NAN替换为0s,我可以替换原始部件

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)
另一种解决方案是通过
切片进行选择
,但需要按以下方式对列名称进行第一次排序:


我认为问题在于,
loc
不起作用。因此,如果使用
df1=df.loc[:,('observations')]
df1.fillna(value=0,inplace=True)
它可以工作。谢谢。我编辑了你的答案并抄写了你的上述评论,以便我能接受。
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