python - 以数字方式重新排序 df.columns alpha

标签 python pandas sorting

我有一个 df 如下:

        Store   Spend_1 Spend_2 Spend_3 Spend_4 Variance_1  Variance_2  Variance_3  Variance_4
0   1   200 230 189 200 -14 16  -6  18
1   2   224 104 240 203 -17 -11 17  -18
2   3   220 168 131 210 10  -9  12  19
3   4   143 187 139 188 -1  -17 -20 -9
4   5   179 121 162 131 6   -25 5   20
5   6   208 158 140 191 16  -14 -22 -6

我正在尝试对列名称应用自定义排序以按如下方式对其进行排序:

    Store   Spend_1 Variance_1  Spend_2 Variance_2  Spend_3 Variance_3  Spend_4 Variance_4
0   1   200 -14 230 16  189 -6  200 18
1   2   224 -17 104 -11 240 17  203 -18
2   3   220 10  168 -9  131 12  210 19
3   4   143 -1  187 -17 139 -20 188 -9
4   5   179 6   121 -25 162 5   131 20
5   6   208 16  158 -14 140 -22 191 -6

我试过简单的 sorted 但显然这适用于字母顺序,忽略末尾的整数。

我玩弄过 enumerating 作为 numbercols df.columns 将字符串更改为整数,应用排序,然后使用 iloc 中的数字,但我不确定如何以这种方式应用自定义排序。

有人能帮忙吗?

最佳答案

想法是使用key parameetr by 2 values - values after _转换为 inetegr第一个值在 _ 之前的 s , 但解决方案适用于所有列而不首先使用 df.columns[1:] , 所以 last 由 df.columns[:1].tolist() 添加到第一列:

cols = df.columns[:1].tolist() +sorted(df.columns[1:], 
                                       key=lambda x: (int(x.split('_')[1]), x.split('_')[0]))

df = df[cols]
print (df)
   Store  Spend_1  Variance_1  Spend_2  Variance_2  Spend_3  Variance_3  \
0      1      200         -14      230          16      189          -6   
1      2      224         -17      104         -11      240          17   
2      3      220          10      168          -9      131          12   
3      4      143          -1      187         -17      139         -20   
4      5      179           6      121         -25      162           5   
5      6      208          16      158         -14      140         -22   

   Spend_4  Variance_4  
0      200          18  
1      203         -18  
2      210          19  
3      188          -9  
4      131          20  
5      191          -6  

关于python - 以数字方式重新排序 df.columns alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56663902/

相关文章:

python - 如何爬取具有多个页面的 API

python - 基于联合条件的 Pandas 切片行

MySQL 按字母顺序显示结果,但在按字母顺序排序的列表之前显示特定项目

python - 在 Maya 2013 中使用 lxml?

python - 我如何评论#define_line

python - 通过匹配两个数据帧的整行来创建 bool 掩码

c - 改进此算法

python - 如何对包含空格分隔数字的字符串列表进行排序?

python - 给定一个hdfs路径,我如何知道它是一个文件夹还是一个带有python的文件

python - 如何在 Pandas 中比较 3 个或更多 DataFrame 的相等性?