首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何重新排列Pandas列的顺序?

如何重新排列Pandas列的顺序?
EN

Stack Overflow用户
提问于 2012-09-08 18:16:04
回答 6查看 117.7K关注 0票数 27
代码语言:javascript
运行
复制
>>> df =DataFrame({'a':[1,2,3,4],'b':[2,4,6,8]})
>>> df['x']=df.a + df.b
>>> df['y']=df.a - df.b
>>> df
   a  b   x  y
0  1  2   3 -1
1  2  4   6 -2
2  3  6   9 -3
3  4  8  12 -4

现在我想重新排列列顺序,这使得'x','y‘列成为第一列和第二列,方法是:

代码语言:javascript
运行
复制
>>> df = df[['x','y','a','b']]
>>> df
    x  y  a  b
0   3 -1  1  2
1   6 -2  2  4
2   9 -3  3  6
3  12 -4  4  8

但是如果我有一个很长的coulmns 'a','b','c','d'.....,我不想显式地列出这些列。我该怎么做呢?

或者,Pandas提供了一个像set_column_sequence(dataframe,col_name, seq)这样的函数,这样我就可以做:set_column_sequence(df,'x',0)set_column_sequence(df,'y',1)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-03-27 19:49:35

代码语言:javascript
运行
复制
def _col_seq_set(df, col_list, seq_list):
    ''' set dataframe 'df' col_list's sequence by seq_list '''
    col_not_in_col_list = [x for x in list(df.columns) if x not in col_list]
    for i in range(len(col_list)):
        col_not_in_col_list.insert(seq_list[i], col_list[i])

    return df[col_not_in_col_list]
DataFrame.col_seq_set = _col_seq_set
票数 3
EN

Stack Overflow用户

发布于 2014-05-19 23:32:07

你也可以这样做:

代码语言:javascript
运行
复制
df = df[['x', 'y', 'a', 'b']]

您可以使用以下命令获取列的列表:

代码语言:javascript
运行
复制
cols = list(df.columns.values)

输出将产生类似如下的结果:

代码语言:javascript
运行
复制
['a', 'b', 'x', 'y']

然后,在将...which放入第一个函数之前,可以很容易地手动重新排列它

票数 46
EN

Stack Overflow用户

发布于 2012-09-08 18:41:23

可能有一个优雅的内置函数(但我还没有找到它)。你可以写一个:

代码语言:javascript
运行
复制
# reorder columns
def set_column_sequence(dataframe, seq, front=True):
    '''Takes a dataframe and a subsequence of its columns,
       returns dataframe with seq as first columns if "front" is True,
       and seq as last columns if "front" is False.
    '''
    cols = seq[:] # copy so we don't mutate seq
    for x in dataframe.columns:
        if x not in cols:
            if front: #we want "seq" to be in the front
                #so append current column to the end of the list
                cols.append(x)
            else:
                #we want "seq" to be last, so insert this
                #column in the front of the new column list
                #"cols" we are building:
                cols.insert(0, x)
return dataframe[cols]

对于您的示例:set_column_sequence(df, ['x','y'])将返回所需的输出。

如果您想要在DataFrame的末尾使用seq,只需传入"front=False“。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12329853

复制
相关文章

相似问题

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