我有一个具有多索引的数据框
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 ...
我正在尝试用0s填充观察框
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)
另一个解决方案是按选择slicing
,但首先需要按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] 删除。
我来说两句