gpt4 book ai didi

python - pandas Multiindex 列方法选择返回所有列而不是子集

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:59 25 4
gpt4 key购买 nike

您好,这是一个我不理解的行为示例。这是列中多索引的示例

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])

df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)

现在我想按第一级选择 df 的子集并返回相关列:

df.loc[:, ['bar']].columns

返回

MultiIndex(levels=[['bar'], ['one', 'two']],
labels=[[0, 0], [0, 1]],
names=['first', 'second'])

但是

df.loc[:, ['bar', 'baz']].columns

返回

MultiIndex(levels=[['bar', 'baz', 'foo', 'qux'], ['one', 'two']],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
names=['first', 'second'])

为什么第二个会返回所有列名而不是

MultiIndex(levels=[['bar', 'baz'], ['one', 'two']] etc...

更重要的是,是否有任何快速修复以便我可以只返回相关数据?

这变得更加相关,因为 pandas 正在弃用面板(它曾经是一种非常优雅的存储多维数据的方式)

最佳答案

在新版 pandas (0.20.1) 中使用 MultiIndex.remove_unused_levels :

print (df.loc[:, ['bar', 'baz']].columns)
MultiIndex(levels=[['bar', 'baz', 'foo', 'qux'], ['one', 'two']],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
names=['first', 'second'])

print (df.loc[:, ['bar', 'baz']].columns.remove_unused_levels())
MultiIndex(levels=[['bar', 'baz'], ['one', 'two']],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
names=['first', 'second'])

Advanced shown levels in documentation .

关于python - pandas Multiindex 列方法选择返回所有列而不是子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43894310/

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