我有很多男高音
Tenors = np.array(['10Y', '15Y', '1M', '1Y', '20Y', '2Y', '30Y', '3M', '5Y', '6M', '9M'])
其中M
代表月,Y
代表年。正确的排序顺序(升序)为
['1M', '3M', '6M', '9M', '1Y', '2Y', '5Y', '10Y', '15Y', '20Y', '30Y']
如何使用python和scipy/numpy来实现这个目标?由于tenors
源自pandas
Dataframe ,因此基于pandas
的解决方案也很好。
5条答案
按热度按时间o8x7eapl1#
方法#1这是一个基于NumPy的方法,使用
np.core.defchararray.replace
-方法#2如果你要处理
'18M'
这样的字符串,我们需要做更多的工作,比如--方法#3这里有另一种方法,虽然是一种循环的方法,但也可以处理一般情况-
样品运行-
sdnqo3pr2#
您可以使用
str.extract
来解析数字和值,然后按astype
和最后sort_values
转换为int
和categories
:gmol16393#
先按最后一个字符排序,然后按整数值排序,直到最后一个字符
h4cxqtbf4#
我选择了长解,因为我无论如何都需要
convert_tenors
,这也解决了Jim的反对意见。退货
2q5ifsrm5#
一个简单的解决方案,将期限转换为等价日,然后以此为基础进行排序: