数据框的第一列包含以下内容:
{10Y, 12Y, 15Y, 1M, 1W, 1Y, 20Y, 25Y, 2M, 2W, 2Y, 30Y, 3M, 3W, 3Y, 4Y, 5Y, 6M, 7Y, 9M}
我想按照主旨的“真实”顺序排列数据框的行:
{1W, 2W, 3W, 1M, 2M, 3M, 6M, 9M, 1Y, 2Y, 3Y, 4Y, 5Y, 7Y, 10Y, 12Y, 15Y, 20Y, 25Y, 30Y}
我应该如何定义这个顺序,然后将其应用到数据框?
提前致谢
最佳答案
创建映射字典并创建自定义排序键:
mapping = {'W': 1, 'M': 10, 'Y': 100}
key = lambda x: x.str[:-1].astype(int) * x.str[-1].map(mapping)
out = df.sort_values('Tenors', key=key)
输出:
>>> out
Tenors
4 1W
9 2W
13 3W
3 1M
8 2M
12 3M
17 6M
19 9M
5 1Y
10 2Y
14 3Y
15 4Y
16 5Y
18 7Y
0 10Y
1 12Y
2 15Y
6 20Y
7 25Y
11 30Y
输入:
>>> df
Tenors
0 10Y
1 12Y
2 15Y
3 1M
4 1W
5 1Y
6 20Y
7 25Y
8 2M
9 2W
10 2Y
11 30Y
12 3M
13 3W
14 3Y
15 4Y
16 5Y
17 6M
18 7Y
19 9M
关于python - 按期限顺序对 pandas 数据框进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75059983/