<p>想法是使用<code>key</code>parametr by 2 values—将<code>_</code>之后的值转换为<code>inetegr</code>s,第一个值在<code>_</code>之前,但解决方案是应用于所有没有带<code>df.columns[1:]</code>的第一列的列,因此最后一个值由<code>df.columns[:1].tolist()</code>添加到第一列:</p>
<pre><code>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
</code></pre>