如何使用lambda函数结合字符串分割对DataFrame索引按A前数字排序?
解决DataFrame按索引中A前缀数字排序的问题
你的错误原因是:x.str.split('A')[0]是取整个Series拆分后的第一个元素(列表类型),而非每个索引项拆分后的第一部分,所以无法转成float触发报错。
以下是两种正确实现方式:
方法一:利用Series字符串方法拆分提取
df_crossplot = df_crossplot.sort_index(key=lambda x: x.str.split('A').str[0].astype(int))
x.str.split('A'):对每个索引字符串按'A'拆分,返回包含拆分后列表的Series.str[0]:提取每个列表的第一个元素(即A前面的数字字符串).astype(int):将字符串转成整数,确保排序是数值顺序而非字符串字典序
方法二:正则提取前缀数字
如果索引格式更复杂,用正则匹配更稳妥:
import re df_crossplot = df_crossplot.sort_index(key=lambda x: x.map(lambda s: int(re.search(r'^(\d+)A', s).group(1))))
re.search(r'^(\d+)A', s):匹配索引开头到'A'前的所有数字.group(1):提取匹配到的数字字符串,转成int后作为排序key
执行任意一种方法后,都会得到你预期的排序结果:
value 1A22 10 2A22 15 3A22 25 10A22 12 11A22 11 12A22 21
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

