根据标题中的浮点后缀对数据框中的列进行排序

时间:2019-06-12 09:43:08

标签: python-3.x pandas sorting

我有以下数据框:

data = [{'Po_+0.00': 1, 'Po_+0.25': 1.5, 'Po_+0.50': 2,'Po_-0.25': 1.3, 'Po_-0.50': 1.6}]
df = pd.DataFrame(data, index =[1])

enter image description here 我的目标是对列进行排序:

enter image description here

我尝试了各种方法,但从未设法获得正确的结果。

有什么主意吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

使用argsort占列名称的数字部分:

df = df[df.columns[df.columns.str[3:].astype(float).argsort()]]
#Alternative
#df = df.iloc[:, df.columns.str[3:].astype(float).argsort()]

print(df)
   Po_-0.50  Po_-0.25  Po_+0.00  Po_+0.25  Po_+0.50
1       1.6       1.3         1       1.5         2

答案 1 :(得分:1)

sorted与参数key和lambda函数一起用于将下一个3的值转换为浮点数:

df = df[sorted(df.columns, key=lambda x: float(x[3:]))]
print (df)
   Po_-0.50  Po_-0.25  Po_+0.00  Po_+0.25  Po_+0.50
1       1.6       1.3         1       1.5         2