[英]Re-ordering df.columns alpha numerically
我有一個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
的number
, cols
的df.columns
改變字符串整數,應用排序,然后在使用數字iloc
,但我不知道如何應用自定義排序的方式。
有人能幫忙嗎?
思想是使用key
由2個值parameetr -值之后_
轉換為inetegr
之前與第一數值• _
,但溶液是適用於所有列,而不先與df.columns[1:]
,所以最后加入第一塔由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
您可以將key
t傳遞給sorted
來進行自己的自定義排序:
sorted_columns = sorted(df.columns, key = lambda col: col[-1] + col[:-1])
df[sorted_columns]
想法是將最終整數放在第一位。 如果您可以輸入兩位數,則會細分。
這是一種拆分_
上的列,反轉結果列表的方法,以便進一步排序優先於尾隨數字並使用pandas.Index.argsort
:
df.iloc[:,[0]+[*df.columns.str.split('_').str[::-1].argsort()[:-1]]]
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
我能想到的最簡單的方法是定義您自己的排序鍵
df = df.reindex(sorted(df.columns, key=lambda x: int(x.split("_")[1]) if "_" in x else 0), axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.