gpt4 book ai didi

python - 多级 Pandas 数据框中的自定义排序列

转载 作者:太空狗 更新时间:2023-10-29 22:06:23 26 4
gpt4 key购买 nike

背景

我有一个包含 2 级列和 1 级行的大数据框,我正在尝试按如下方式对其进行排序:0级:按字母顺序排列;级别 1:自定义排序。

例子

import pandas as pd
dictionary = {'A' : {'M': [1,2,3,4,5],
'L': [6,7,8,9,1],
'F': [3,5,1,3,5] },
'C' : {'M': [2,3,4,5,6],
'L': [7,8,9,1,2],
'F': [0,1,6,3,5] },
'B' : {'M': [1,5,2,5,3],
'L': [9,5,6,3,4],
'F': [6,2,7,1,5] }
}
reform = {(outerKey, innerKey): values for outerKey, innerDict in dictionary.iteritems() for innerKey, values in innerDict.iteritems()}
pd.DataFrame(reform,index=['g','h','i','j','k'])

我现在有的是

#        A          B           C
# F L M F L M F L M
# g 3 6 1 6 9 1 0 7 2
# h 5 7 2 2 5 5 1 8 3
# i 1 8 3 7 6 2 6 9 4
# j 3 9 4 1 3 5 3 1 5
# k 5 1 5 5 4 3 5 2 6

问题

如何指定列的顺序为 0 级的 A、B、C 和 1 级的 F、M、L?

### OUT
# A B C
# F M L F M L F M L

我尝试使用 pd.IndexSlice.loc,但我仍然只能按字母顺序排列。

最佳答案

您可以使用 reindex_axis 实现此目的,这接受标签 arg、轴和级别:

In [20]:
df = df.reindex_axis(list('FML'), axis=1, level=1)
df

Out[20]:
A B C
F M L F M L F M L
g 3 1 6 6 1 9 0 2 7
h 5 2 7 2 5 5 1 3 8
i 1 3 8 7 2 6 6 4 9
j 3 4 9 1 5 3 3 5 1
k 5 5 1 5 3 4 5 6 2

感谢@Nickli Maveli,您还可以使用 reindex实现相同的目标:

In [22]:
df = df.reindex(columns=list('FML'), level=1)
df

Out[22]:
A B C
F M L F M L F M L
g 3 1 6 6 1 9 0 2 7
h 5 2 7 2 5 5 1 3 8
i 1 3 8 7 2 6 6 4 9
j 3 4 9 1 5 3 3 5 1
k 5 5 1 5 3 4 5 6 2

关于python - 多级 Pandas 数据框中的自定义排序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43073254/

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