如何对Pandas DataFrame的class_id列按数字升序排序?
问题
我有一个结构如下的Pandas DataFrame:
| class_id | dims |
|---|---|
| 94369_GA_30122 | 95 |
| 27369_GA_30122 | 14 |
| 78369_CA_30122 | 27 |
| 30472_MN_55121 | 16 |
该DataFrame包含更多行数据。我需要将class_id列按前缀数字升序排序,预期效果如下:
| class_id | dims |
|---|---|
| 27369_GA_30122 | 14 |
| 30472_MN_55121 | 16 |
| 78369_CA_30122 | 27 |
| 94369_GA_30122 | 95 |
请问如何实现这一排序需求?
解决方案
你可以通过提取class_id中的前缀数字作为排序依据,以下是两种实用实现方式:
方法1:生成临时排序键后排序
先拆分出class_id的前缀数字并转为整数,以此为键排序后再删除临时列:
import pandas as pd # 假设你的DataFrame名为df df['sort_key'] = df['class_id'].str.split('_').str[0].astype(int) df_sorted = df.sort_values('sort_key').drop('sort_key', axis=1)
方法2:直接指定排序逻辑(更简洁)
无需新增临时列,直接在sort_values中定义排序键的生成规则:
df_sorted = df.sort_values(by='class_id', key=lambda x: x.str.split('_').str[0].astype(int))
两种方法都能得到预期的排序结果,方法2更精简,不会产生额外的临时列。
内容的提问来源于stack exchange,提问作者user16580724
相关产品推荐
相关产品推荐

