如何按已排序外部ID列表对DataFrame排序并获取实现示例
按自定义ID列表重排DataFrame的简易实现
首先给你还原可运行的基础示例代码(你原来手写的格式不符合pandas语法,这里先转成可直接运行的版本):
import pandas as pd # 原始待排序DataFrame Dataframe1 = pd.DataFrame({ "ID": ["11000", "02401", "83329"], "City": ["Berlin", "Hamburg", "München"], "NR1": ["(123,2)", "(435,2)", "(124,3)"], "NR2": ["(532,1)", "(352,1)", "(125,2)"] }) # 你提前排好顺序的目标ID列表(命名为target_id_order避免和DataFrame的ID列重名) target_id_order = ["02401", "83329", "11000"]
核心重排代码(新手友好版)
用pandas原生的索引对齐逻辑实现,不需要额外写循环判断,3行核心操作就能完成,完全适配你81行数据、12个变量的实际规模:
sorted_df = ( Dataframe1 .set_index("ID") # 将ID列设为行索引,和目标列表做值匹配 .loc[target_id_order] # 按指定的ID顺序选取行 .reset_index() # 将ID从索引恢复为普通列,还原默认数字行索引 )
运行后打印sorted_df的输出完全符合你的预期:
ID City NR1 NR2 0 02401 Hamburg (435,2) (352,1) 1 83329 München (124,3) (125,2) 2 11000 Berlin (123,2) (532,1)
新手避坑提示
- 这套逻辑和DataFrame的列数、总行数完全无关,只要ID列能和目标列表一一对应,代码不需要任何修改就能直接运行
- 用
loc方式的好处是:如果目标ID列表里有原DataFrame不存在的ID,代码会直接抛出明确的报错,不会悄无声息生成空值行 - 如果你希望遇到不存在的ID时自动跳过而不是报错,可以把
loc换成reindex实现 - 命名自定义ID列表时尽量和DataFrame的列名区分开,避免变量重名引发逻辑混乱
内容的提问来源于stack exchange,提问作者meg1234
相关产品推荐
相关产品推荐

