Python 如何根据字母和数字对列进行排序?

Python 如何根据字母和数字对列进行排序?,python,pandas,Python,Pandas,我有一个熊猫数据框,它列出了96或384井板中的井,我想对它们进行分类。这些井的标签如下: A1, A2, A3, ..., A10, A11, A12, B1, B2, B3,... 在my pandas数据框中,按井列进行排序可以得到: A1, A10, A11, A12, A2, A3, ... 然而,上面的排序顺序正是我想要的 除了将列拆分为字母和数字列,然后按两列排序外,还有其他更聪明或更简洁的方法吗?IIUC,您可以尝试: l = ['A1', 'A10', 'A3', 'A2'

我有一个熊猫数据框,它列出了96或384井板中的井,我想对它们进行分类。这些井的标签如下:

A1, A2, A3, ..., A10, A11, A12, B1, B2, B3,...
在my pandas数据框中,按
列进行排序可以得到:

A1, A10, A11, A12, A2, A3, ...
然而,上面的排序顺序正是我想要的

除了将列拆分为字母和数字列,然后按两列排序外,还有其他更聪明或更简洁的方法吗?

IIUC,您可以尝试:

l = ['A1', 'A10', 'A3', 'A2', 'A11', 'A12', 'B1', 'B2', 'B3']
sorted(l,key = lambda x: (x[0],int(x[1:])))
或:



只使用熊猫的解决方案。还可以处理前缀文本长度可变的情况:
Sales1
Region1
Product1

# Extract the columns into a separate series and sort the series
s = df.columns.to_series()
s.index = s.str.extract('(\D+)(?P<num>\d+)').assign(num=lambda x: x['num'].astype('int'))
s.sort_index(inplace=True)

# Access the columns in sorted order. Note that you are not changing
# the dataframe at all
df[s]
#将列提取到单独的序列中并对序列进行排序
s=df.columns.to_series()
s、 index=s.str.extract('(\D+(\P\D+))).assign(num=lambda x:x['num'].astype('int'))
s、 排序索引(就地=真)
#按排序顺序访问列。请注意,您没有改变
#数据帧
df[s]

可能,但这确实涉及使用数据帧而不是列表进行排序。不过,这个建议很有帮助,我想我可能可以向
pyjanitor
中添加一个函数,用于
natsort
处理数据帧。作为一个附带提示,如果您需要一个开箱即用的wells id列表,您可以简单地使用
[letter+str(num)表示“ABCDEFGH”中的字母表示num(1,13)]
您可以添加natsort:-)更常见~谢谢大家。我现在接受natsort作为答案,因为它是提供的答案中最方便的。
['A1', 'A2', 'A3', 'A10', 'A11', 'A12', 'B1', 'B2', 'B3']
# Extract the columns into a separate series and sort the series
s = df.columns.to_series()
s.index = s.str.extract('(\D+)(?P<num>\d+)').assign(num=lambda x: x['num'].astype('int'))
s.sort_index(inplace=True)

# Access the columns in sorted order. Note that you are not changing
# the dataframe at all
df[s]