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