gpt4 book ai didi

python - 不使用元组的多索引列的 set_index

转载 作者:行者123 更新时间:2023-12-02 03:07:06 25 4
gpt4 key购买 nike

设置:

np.random.seed(0)
iix = pd.MultiIndex.from_product([['bar', 'baz', 'foo'],['one', 'two']])
df = pd.DataFrame(np.random.randn(3, 6), columns=iix)

Out[120]:
bar baz foo
one two one two one two
0 1.764052 0.400157 0.978738 2.240893 1.867558 -0.977278
1 0.950088 -0.151357 -0.103219 0.410599 0.144044 1.454274
2 0.761038 0.121675 0.443863 0.333674 1.494079 -0.205158

在 level = 1 和所有列 twoset_index。我需要使用元组列表,如下所示

df.set_index([('bar', 'two'), ('baz', 'two'), ('foo', 'two')])

Out[121]:
bar baz foo
one one one
(bar, two) (baz, two) (foo, two)
0.400157 2.240893 -0.977278 1.764052 0.978738 1.867558
-0.151357 0.410599 1.454274 0.950088 -0.103219 0.144044
0.121675 0.333674 -0.205158 0.761038 0.443863 1.494079

问题:是否有其他简单的方法可以在不使用上述元组列表的情况下实现此set_index

注意:我知道我可以使用列表理解和get_level_values来概括元组列表的构造。不过,我对不使用元组列表的方式感兴趣。

最佳答案

让我们尝试一下这种疯狂的做法:

df.set_index(pd.MultiIndex.from_frame(df.loc(axis=1)[:, 'two'])).loc(axis=1)[:,'one']

输出:

                                       bar       baz       foo
one one one
(bar, two) (baz, two) (foo, two)
0.400157 2.240893 -0.977278 1.764052 0.978738 1.867558
-0.151357 0.410599 1.454274 0.950088 -0.103219 0.144044
0.121675 0.333674 -0.205158 0.761038 0.443863 1.494079

使用一个鲜为人知的参数.locaxisSee docs

You can also specify the axis argument to .loc to interpret the passed slicers on a single axis.

关于python - 不使用元组的多索引列的 set_index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59570054/

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