如何对DataFrame的列进行重新排序?附示例数据集
如何对Pandas DataFrame的列进行重新排序
针对你给出的这个DataFrame,我来分享几个实用的列重新排序方法,都是日常处理数据时常用的技巧:
方法1:手动指定列顺序
这是最直接的方式——如果你已经明确知道想要的列顺序,直接把列名按目标顺序整理成列表,然后重新索引DataFrame就行。
比如假设你想把k列放在最后,其他列按final01, final10, final11, final12, final13, final14, final15的顺序排列,代码示例如下:
# 定义你想要的列顺序 new_col_order = ['final01', 'final10', 'final11', 'final12', 'final13', 'final14', 'final15', 'k'] # 重新排列列 df = df[new_col_order]
这种方式灵活度拉满,适合列数不多或者已经明确目标顺序的场景。
方法2:按列名规则自动排序
看你的列里有一堆finalXX格式的字段,如果你想按final后面的数字从小到大排序,同时保留k列在开头(或者你指定的位置),可以用sorted()配合自定义排序逻辑实现:
# 先筛选出所有final开头的列,按后面的数字排序 sorted_final_cols = sorted( [col for col in df.columns if col.startswith('final')], key=lambda x: int(x.split('final')[1]) ) # 把k列放在最前面,拼接排序后的final列 new_col_order = ['k'] + sorted_final_cols # 应用新顺序 df = df[new_col_order]
执行后,列顺序就会变成k, final01, final10, final11, final12, final13, final14, final15,完美贴合数字递增的需求。
方法3:使用reindex()方法
和第一种方法逻辑类似,但用reindex()写法更清晰,适合需要同时处理行和列的场景,单独处理列的话代码是这样的:
new_col_order = ['k', 'final01', 'final10', 'final11', 'final12', 'final13', 'final14', 'final15'] df = df.reindex(columns=new_col_order)
效果和直接索引列完全一致,选哪种写法全看个人习惯。
小提醒:以上方法默认会返回一个新的DataFrame,如果你不想创建新对象,可以加上inplace=True参数(比如df.reindex(columns=new_col_order, inplace=True)),不过更推荐赋值给原变量或者新变量,避免原地修改带来的意外问题~
内容的提问来源于stack exchange,提问作者Leo96
相关产品推荐
相关产品推荐

