gpt4 book ai didi

python - 如何在不修改数据框的情况下同时按列和多索引的一部分对 Pandas 数据框进行排序

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

给定:

mi1 = MultiIndex.from_tuples([('bar', 'y'), ('bar', 'z'), ('baz', 'y'), ('baz', 'z'), ('foo', 'y'), ('foo', 'z')])

dfa = DataFrame(random.rand(6),index=mi1)

如何同时按多索引的某些列和某些级别进行排序(在这种情况下,假设多索引的级别 1,然后按列 0

我知道我可以将部分多重索引传播到列:

dfa[1] = zip(*dfa.index)[1]
dfa.sort(columns=[1,0])

但是如果没有这个传播步骤如何进行排序呢?

@user2360798 有一个类似的问题,但没有人回答问题的列/索引部分的同时排序: Sort pandas dataframe both on values of a column and index?

最佳答案

如果你重新设置索引就很容易了。

用名字构建你的索引(不是必需的,但更能提供信息)

In [23]: mi1 = MultiIndex.from_tuples([('bar', 'y'), ('bar', 'z'), ('baz', 'y'), ('baz', 'z'), ('foo', 'y'), ('foo', 'z')],names=['first','second'])

In [24]: dfa = DataFrame(np.random.randn(6),index=mi1)

In [25]: dfa
Out[25]:
0
first second
bar y 0.18574062599
z -0.82120720368
baz y -0.05645183973
z -1.07579609513
foo y -1.03528813447
z -0.46439965218

[6 rows x 1 columns]

Reset 将所有索引放入列中,排序,然后还原

In [26]: dfa.reset_index().sort(columns=['second',0]).set_index(dfa.index.names)
Out[26]:
0
first second
foo y -1.03528813447
baz y -0.05645183973
bar y 0.18574062599
baz z -1.07579609513
bar z -0.82120720368
foo z -0.46439965218

[6 rows x 1 columns]

关于python - 如何在不修改数据框的情况下同时按列和多索引的一部分对 Pandas 数据框进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20613844/

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