gpt4 book ai didi

pandas - 在 pandas 中按字符串和数字对 MultiIndex 列进行排序

转载 作者:行者123 更新时间:2023-12-05 01:11:27 26 4
gpt4 key购买 nike

我有一个 pandas multiIndex 数据框,我想按名称和编号排序。

创建一个类似的数据集,df作为示例:

random= np.random.rand(3,10)
a = [ 'a','b','a','b','a','b','a','b','a', 'b']
b = ['p11_1','p11_1','p1_1','p1_1','p9_1','p9_1','p10_1','p10_1','p1_2','p1_2']
arrays = [a,b]
df = pd.DataFrame(data = random, columns = arrays)

标题层看起来像:

   a         b         a  ...         b         a         b
p11_1 p11_1 p1_1 ... p10_1 p1_2 p1_2

我可以使用一个简单的排序命令,但这会导致错误的输出:

df = df.sort_index(axis=1)

标题层看起来像:

      a                      ...         b                    
p10_1 p11_1 p1_1 ... p1_1 p1_2 p9_1

这对两层都进行了排序,但第二层不是所需的输出。

所需的输出对第二层的排序如下:

p1_1 < p1_2 < p9_1 < p10_1 < p11_1  

而不是:

p10_1 < p11_1 < p1_1 < p1_2 < p9_1 

任何事情都会有所帮助!

最佳答案

让我们试试natsorted

from natsort import natsorted
df=df.reindex(columns=natsorted(df.columns.tolist(), key=lambda element: (element[0], element[1])))
Out[126]:
a ... b
p1_1 p1_2 p9_1 ... p9_1 p10_1 p11_1
0 0.122500 0.339663 0.880657 ... 0.258351 0.777972 0.824912
1 0.506081 0.947983 0.502101 ... 0.626606 0.187132 0.344037
2 0.465429 0.688159 0.396115 ... 0.840099 0.750303 0.932954
[3 rows x 10 columns]

关于pandas - 在 pandas 中按字符串和数字对 MultiIndex 列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63161907/

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