这是我的df:

                             Net   Upper   Lower  Mid  Zsore
Answer option
More than once a day          0%   0.22%  -0.12%   2    65
Once a day                    0%   0.32%  -0.19%   3    45
Several times a week          2%   2.45%   1.10%   4    78
Once a week                   1%   1.63%  -0.40%   6    65


如何将按名称("Mid")的列移动到表的开头,索引为0。结果应如下所示:

                             Mid   Upper   Lower  Net  Zsore
Answer option
More than once a day          2   0.22%  -0.12%   0%    65
Once a day                    3   0.32%  -0.19%   0%    45
Several times a week          4   2.45%   1.10%   2%    78
Once a week                   6   1.63%  -0.40%   1%    65


我当前的代码使用df.columns.tolist()按索引移动列,但我想按名称移动它。

最佳答案

我们可以使用ix通过传递列表来重新排序:

In [27]:
# get a list of columns
cols = list(df)
# move the column to head of list using index, pop and insert
cols.insert(0, cols.pop(cols.index('Mid')))
cols
Out[27]:
['Mid', 'Net', 'Upper', 'Lower', 'Zsore']
In [28]:
# use ix to reorder
df = df.ix[:, cols]
df
Out[28]:
                      Mid Net  Upper   Lower  Zsore
Answer_option
More_than_once_a_day    2  0%  0.22%  -0.12%     65
Once_a_day              3  0%  0.32%  -0.19%     45
Several_times_a_week    4  2%  2.45%   1.10%     78
Once_a_week             6  1%  1.63%  -0.40%     65


另一种方法是引用该列,然后将其重新插入前面:

In [39]:
mid = df['Mid']
df.drop(labels=['Mid'], axis=1,inplace = True)
df.insert(0, 'Mid', mid)
df
Out[39]:
                      Mid Net  Upper   Lower  Zsore
Answer_option
More_than_once_a_day    2  0%  0.22%  -0.12%     65
Once_a_day              3  0%  0.32%  -0.19%     45
Several_times_a_week    4  2%  2.45%   1.10%     78
Once_a_week             6  1%  1.63%  -0.40%     65


您还可以使用loc达到与从ix开始的未来版本的熊猫不再推荐使用的0.20.0相同的结果:

df = df.loc[:, cols]

09-26 05:32