【发布时间】:2021-06-09 04:15:42
【问题描述】:
我想通过以下逻辑对数据框中的 1 列进行排序:
- 数字在前 - 按升序排列;
- 字母按照升序排列;
- 最后,字符串长度 - 按降序排列。
示例数据框 - 使用 name 列进行排序并最终添加一个“订单”列:
import pandas as pd
df_1 = pd.DataFrame({'name': ['3D', '3DD', 'AC', 'AC-', 'BE', '2C','BED'], 'score': [2, 4, 2, 3, 10, 8, 2]})
我已经尝试了下面的 sort_values(),
df_1['Len'] = df_1['name'].apply(lambda x: len(x))
df_1.sort_values(by=['name', 'Len'], ascending=[True, False], inplace=True,ignore_index=True)
df_1.drop(columns=['Len'], inplace=True)
df_1['Order'] = df_1.index+1
但是,给我这个结果 - 基本上按降序排序的字符串长度不起作用:
name score Order
0 2C 8 1
1 3D 2 2
2 3DD 4 3
3 AC 2 4
4 AC- 3 5
5 BE 10 6
6 BED 2 7
根据我上面的排序逻辑,这是想要的结果:
name score Order
0 2C 8 1
1 3DD 4 2
2 3D 2 3
3 AC- 3 4
4 AC 2 5
5 BED 2 6
6 BE 10 7
谢谢!
【问题讨论】:
-
您可以编写一个评分函数来计算来自
name列的订单并将其提供给sort_values的key。
标签: python pandas dataframe sorting