首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在pandas中按名称将列移动到表的前面

在pandas中按名称将列移动到表的前面
EN

Stack Overflow用户
提问于 2014-08-04 23:21:32
回答 9查看 136.8K关注 0票数 127

下面是我的df:

代码语言:javascript
复制
                             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。结果应该是这样的:

代码语言:javascript
复制
                             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()按索引移动列,但我想按名称移动它。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2014-08-04 23:30:10

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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来实现相同的结果,因为从0.20.0开始,pandas的未来版本中将不推荐使用ix

代码语言:javascript
复制
df = df.loc[:, cols]
票数 134
EN

Stack Overflow用户

发布于 2019-06-06 22:27:29

也许我漏掉了一些东西,但这些答案中的许多似乎过于复杂。您应该能够仅设置单个列表中的列:

列到前面:

代码语言:javascript
复制
df = df[ ['Mid'] + [ col for col in df.columns if col != 'Mid' ] ]

或者,如果你想把它移到后面:

代码语言:javascript
复制
df = df[ [ col for col in df.columns if col != 'Mid' ] + ['Mid'] ]

或者,如果您想移动多个列:

代码语言:javascript
复制
cols_to_move = ['Mid', 'Zsore']
df           = df[ cols_to_move + [ col for col in df.columns if col not in cols_to_move ] ]
票数 93
EN

Stack Overflow用户

发布于 2015-07-14 09:11:52

您可以在pandas中使用df.reindex()函数。df是

代码语言:javascript
复制
                      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

定义列名列表

代码语言:javascript
复制
cols = df.columns.tolist()
cols
Out[13]: ['Net', 'Upper', 'Lower', 'Mid', 'Zsore']

将列名移动到所需位置

代码语言:javascript
复制
cols.insert(0, cols.pop(cols.index('Mid')))
cols
Out[16]: ['Mid', 'Net', 'Upper', 'Lower', 'Zsore']

然后使用df.reindex()函数重新排序

代码语言:javascript
复制
df = df.reindex(columns= cols)

输出为: df

代码语言:javascript
复制
                      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
票数 50
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25122099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档