按字符串中的数字对列标签进行排序,Python

时间:2019-08-13 15:08:30

标签: python pandas sorting columnsorting

我已成功将Python连接到Microsoft Access数据库。当我尝试按数字升序对数据框中的列标签进行排序时,会出现问题。列名还包含字符。

我研究了几个排序功能,但是似乎没有一个功能可以解决此问题。

我的数据框如下;

C1  C10  C11  C12  C13  C14 ... C2  C20  C21 ... C3 ...

我希望如何对列进行排序;

C1  C2  C3  C4  C5  C6  C7  C8  C9  C10  C11 ...

我的数据框还包含其他成分,例如苯,甲苯等,因此我希望列表也按字母顺序排列。

此外,有没有一种将其排序为;

... C4   C5   iC5   nC5   C6   iC6   nC6.

上述问题最重要,但是如果有人知道是否可以/如何做到这一点,请指教!

预先,谢谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我认为这可能是您正在寻找的答案:

data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)

您可以随意修改x [1:]中的值,以在字符串中包括或排除更多字符。

答案 1 :(得分:0)

对于第一种情况,您可以执行以下操作。

df = df[list(sorted(df.columns.tolist()))]

在第二种情况下,也许可以反转字符串。

rev = lambda cols: list(map(lambda x: "".join(list(reversed(x))), cols)) 
cols = df.columns.tolist()
df = df[rev(list(sorted(rev(df.columns.tolist()))))]