gpt4 book ai didi

python - Pandas.sort_index 不按第二个给定参数排序

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

这是一个 MWE:

import pandas as pd

pd.np.random.seed(0)
(
pd.DataFrame(pd.np.random.rand(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
.assign(b=lambda df: (df.b*10).astype(int))
.set_index(['a', 'b', 'c'])
.sort_index(axis=0, level=['b', 'a'])
)

Out[96]:
d e
a b c
0.087129 0 0.832620 0.778157 0.870012
0.639921 1 0.944669 0.521848 0.414662
0.670638 2 0.128926 0.315428 0.363711
0.359508 4 0.697631 0.060225 0.666767
0.645894 4 0.891773 0.963663 0.383442
0.791725 5 0.568045 0.925597 0.071036
0.617635 6 0.616934 0.943748 0.681820
0.264556 7 0.456150 0.568434 0.018790
0.978618 7 0.461479 0.780529 0.118274
0.548814 7 0.602763 0.544883 0.423655

我不明白为什么 a 索引未排序(请参阅 b=7 行)。

预期结果(但 Not Acceptable 解决方案):

pd.np.random.seed(0)
(
pd.DataFrame(pd.np.random.rand(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
.assign(b=lambda df: (df.b*10).astype(int))
.sort_values(['b', 'a'])
.set_index(['a', 'b', 'c'])
)

Out[104]:
d e
a b c
0.087129 0 0.832620 0.778157 0.870012
0.639921 1 0.944669 0.521848 0.414662
0.670638 2 0.128926 0.315428 0.363711
0.359508 4 0.697631 0.060225 0.666767
0.645894 4 0.891773 0.963663 0.383442
0.791725 5 0.568045 0.925597 0.071036
0.617635 6 0.616934 0.943748 0.681820
0.264556 7 0.456150 0.568434 0.018790
0.548814 7 0.602763 0.544883 0.423655
0.978618 7 0.461479 0.780529 0.118274

最佳答案

设置多重索引时,您需要提供 b 作为索引的第一级:

...
.set_index(['b', 'a', 'c'])
...

输出:

                            d           e
b a c
0 0.087129 0.832620 0.778157 0.870012
1 0.639921 0.944669 0.521848 0.414662
2 0.670638 0.128926 0.315428 0.363711
4 0.359508 0.697631 0.060225 0.666767
0.645894 0.891773 0.963663 0.383442
5 0.791725 0.568045 0.925597 0.071036
6 0.617635 0.616934 0.943748 0.681820
7 0.264556 0.456150 0.568434 0.018790
0.548814 0.602763 0.544883 0.423655
0.978618 0.461479 0.780529 0.118274

pandas 中的多索引作为索引的嵌套结构工作:行首先按第一级索引分组,然后按第二级索引分组,依此类推。

因此,当您提供 a 作为第一个级别时,它会尝试在同一索引级别中查找具有相同值(例如 0.264556)的其他行。由于您的 a 值一般来说似乎是唯一的,因此每个组最终只有一个成员,这意味着每个组中没有任何内容可以排序。

关于python - Pandas.sort_index 不按第二个给定参数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55228449/

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