gpt4 book ai didi

python - 导致 MultiIndex 中的级别不被删除的 Pandas 幕后发生了什么?

转载 作者:太空狗 更新时间:2023-10-30 01:31:46 24 4
gpt4 key购买 nike

考虑数据框df
请注意,列对象是单级 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

如何挤压

df.A.squeeze()

0 1
1 1
2 1
Name: (A,), dtype: int64

这完全不是我所期望的。

  1. 是什么阻止它变成名称为 'A' 的系列对象?
  2. 解决此问题最直观的方法是什么?
  3. 有什么充分的理由说明我们应该使用单层 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

关于python - 导致 MultiIndex 中的级别不被删除的 Pandas 幕后发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49639523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com