值为字母数字时的数据操作排序索引

2024-03-28 16:17:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道我应该如何处理这个数据操纵的困境。 在索引级别上的值为字母数字的数据帧中,对多索引的索引进行排序的最佳方法是什么。 值为:

[u'0', u'1', u'10', u'11', u'2', u'2Y', u'3', u'3Y', u'4', u'4Y', u'5', u'5Y', u'6', u'7', u'8', u'9', u'9Y']

我搜索的结果是:

[u'0', u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9', u'10', u'11', u'2Y', u'3Y', u'4Y', u'5Y', u'9Y']

普通的数值表示月份,而整数加上“Y”表示年份。你知道吗

有没有办法对索引进行排序?你知道吗

持续时间-是多指标的一个级别,第二个是总和。 请在下面找到一个示例数据集:

Duration                            2          2Y         3         3Y   
customer                                                                     
Invoice A                         25.50        0.00      0.00       20.00   
Invoice B                         50.00        25.00     -10.50     0.00
Invoice C                         125.00       0.00      11.20      0.50
Invoice D                         0.00        15.00      0.00       80.10

Tags: 数据方法排序字母数字整数invoice级别
1条回答
网友
1楼 · 发布于 2024-03-28 16:17:41

可以使用natsort包对列进行自然排序。举个例子:

import natsort as ns

c =  ['0', '1', '10', ...]
c = sorted(ns.natsorted(c), key=lambda x: not x.isdigit())

print(c)
['0',
 '1',
 '2',
 '3',
 '4',
 '5',
 '6',
 '7',
 '8',
 '9',
 '10',
 '11',
 '2Y',
 '3Y',
 '4Y',
 '5Y',
 '9Y']

对于您的问题,类似的方法如下reindex_axis作为额外步骤:

c = df.columns.levels[1]
c = sorted(ns.natsorted(c), key=str.isdigit, reverse=True)

df = df.reindex_axis(pd.MultiIndex.from_product([df.columns.levels[0], c]), axis=1)

相关问题 更多 >