考虑数据帧df
请注意,columns对象是单级MultiIndex。
midx = pd.MultiIndex.from_product([list('AB')])
df = pd.DataFrame(1, range(3), midx)
A B
0 1 1
1 1 1
2 1 1
现在当我引用
'A'
列时df.A
A
0 1
1 1
2 1
我得到一个单列数据框,而不是我期望的系列对象。因此,我可以无限期地引用此专栏。
df.A.A.A.A.A
A
0 1
1 1
2 1
作为另一项检查,我使用了
xs
df.xs('A', axis=1)
A
0 1
1 1
2 1
同样的问题。
pd.IndexSlice
?df.loc[:, pd.IndexSlice['A']]
A
0 1
1 1
2 1
squeeze
怎么样df.A.squeeze()
0 1
1 1
2 1
Name: (A,), dtype: int64
这根本不是我所期望的。
'A'
的系列对象? MultiIndex
? 最佳答案
我写这个来解决这个问题。
def fix_single_level_multiindex(midx):
return midx.get_level_values(0) if midx.nlevels == 1 else midx
或者
def fix_single_level_multiindex(midx):
return midx.levels[0][midx.labels[0]] if midx.nlevels == 1 else midx