You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按分隔符后首字符对Pandas DataFrame列排序?

按_分隔符后内容对DataFrame列排序的问题解决

需求说明

需要将DataFrame的列按列名中_分隔符后的首字母排序,目标列顺序为:cat_A、apple_B、dog_C、car_D

错误代码及报错

以下是两种错误尝试及对应报错:

import pandas as pd
df = pd.DataFrame()
df.columns = ['apple_B','cat_A','dog_C','car_D']

# 错误尝试1:误用DataFrame的sort_values参数
df.columns.sort_values(by=df.columns.str.split('-')[1])
# 报错:TypeError: sort_values() got an unexpected keyword argument 'by'

# 错误尝试2:分隔符错误+key函数返回形状不符
df.sort_index(axis=1, key=lambda s: s.str.split('-')[1])
# 报错:ValueError: User-provided `key` function must not change the shape of the array.

错误原因

  1. df.columns是Index对象,其sort_values()方法没有by参数,该参数仅属于DataFrame的sort_values()方法。
  2. 列名中实际分隔符是_而非-,用split('-')无法正确拆分;同时直接取[1]会导致返回结果形状不符合key函数要求(需与输入列名数组形状一致)。

正确解决方案

方法1:使用sort_index的key参数(推荐)

修正分隔符,确保key函数返回同形状的结果:

import pandas as pd
df = pd.DataFrame()
df.columns = ['apple_B','cat_A','dog_C','car_D']

# 按_后的部分排序列
df_sorted = df.sort_index(axis=1, key=lambda col: col.str.split('_').str[1])
print(df_sorted.columns)
# 输出:Index(['cat_A', 'apple_B', 'dog_C', 'car_D'], dtype='object')

方法2:手动排序列名后重排

# 对列名列表按_后的部分排序
sorted_cols = sorted(df.columns, key=lambda x: x.split('_')[1])
# 重新设置DataFrame的列顺序
df_sorted = df[sorted_cols]
print(df_sorted.columns)
# 输出:Index(['cat_A', 'apple_B', 'dog_C', 'car_D'], dtype='object')

关于后续尝试的说明

你后续尝试的代码是对行索引进行排序,再用相同索引排序列,这与需求不符。需求是排序列名,因此需要针对列名列表进行排序操作,而非行索引。

内容的提问来源于stack exchange,提问作者skiventist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:50:51