如何使用key参数对Pandas DataFrame列按指定顺序排序?
用Pandas的sort_index按指定列顺序重排DataFrame列
假设我们有如下Pandas DataFrame,包含A、B、d三列:
import pandas as pd df = pd.DataFrame([[1, 2, "a"], [1, "b", 3], ["c", 4, 6]], columns=['A', 'B', 'd']) # 输出结果 # A B d # 0 1 2 a # 1 1 b 3 # 2 c 4 6
我们需要将列调整为指定顺序['d', 'A', 'B'],期望输出:
col_target_order = ['d', 'A', 'B'] # df_desired 输出 # d A B # 0 a 1 2 # 1 3 1 b # 2 6 c 4
已知可以通过sort_index函数实现,但直接传入目标列顺序列表会报错(列表不可调用),请问该如何指定key参数?
解决方案
sort_index的key参数需要传入一个可调用函数,该函数需将每个列名映射到它在目标顺序列表中的索引位置,sort_index会基于这些索引值对列进行排序,从而得到指定的列顺序。
具体实现代码:
col_target_order = ['d', 'A', 'B'] df_desired = df.sort_index(axis=1, key=lambda col: [col_target_order.index(c) for c in col])
关键说明:
axis=1:指定对列进行排序(默认axis=0是对行排序)- 匿名lambda函数:遍历当前DataFrame的所有列名,通过
col_target_order.index(c)获取每个列名在目标顺序列表中的位置索引,sort_index会根据这些索引值从小到大排序列,最终列的顺序与目标列表完全匹配。
执行后验证输出:
print(df_desired) # d A B # 0 a 1 2 # 1 3 1 b # 2 6 c 4
内容的提问来源于stack exchange,提问作者Michael Gruenstaeudl
相关产品推荐
相关产品推荐

