【问题标题】:Moving Pandas Dataframe Columns to the start将 Pandas 数据框列移到开头
【发布时间】:2022-01-26 00:00:38
【问题描述】:

我有一个包含将近一千个列的 pandas 数据框

列标题是这样的

[smth,smth,smth,smth.....a,b,c,d,e]

我将如何重新排列列以将 A,B,C,D,E 移到开头:

[a,b,c,d,e,smth,smth......]

【问题讨论】:

  • 您想反转列的顺序吗?喜欢df.iloc[:, ::-1]?
  • [smth, smth, smth, ...] 是什么意思?除了最后几个之外,它们都一样吗?
  • 不,它只是不相关
  • 我不想颠倒它们,我只是希望它们按顺序排列,最后五个成为前 5 个。(最后一个成为第 5 个等)
  • 这能回答你的问题吗? Move column by name to front of table in pandas

标签: python pandas dataframe


【解决方案1】:

如果您只是想将最后 n 列移到第一个。您可以更改列顺序并使用该选择覆盖数据框

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(100, 5)), columns=list('ABCDE'))
cols = list(df.columns)
cols_shift = 2
new_cols = []
new_cols.extend(cols[-cols_shift:])
new_cols.extend(cols[:-cols_shift])
new_cols

df = df[new_cols]
df 

【讨论】:

    【解决方案2】:

    如果我是你,我只会使用内置于 pandas 的包含的 .pop() 方法。

    所以在你的情况下,我会做这样的事情:你最终会得到一个 dataFrame,其中使用 pop 方法的列现在是第一个,随后它将转移所有其余部分。

    first_column = df.pop('A')
    

    您可以继续对其他每一列执行此操作,它会很好地工作,如果您有太多数据以至于这样做变得很麻烦,您可以运行一个循环。

    pandas 也提供了一些很好的信息:

    https://www.geeksforgeeks.org/how-to-move-a-column-to-first-position-in-pandas-dataframe/

    【讨论】:

      【解决方案3】:

      干净高效的方法是使用reindex:

      cols = list(df.columns)
      df.reindex(columns=cols[-5:]+cols[:-5])
      

      例子:

      df = pd.DataFrame([], columns=['X', 'Y', 'Z', 'A', 'B', 'C', 'D', 'E'])
      print(df)
      
      cols = list(df.columns)
      df = df.reindex(columns=cols[-5:]+cols[:-5])
      print(df)
      

      输出:

      Empty DataFrame
      Columns: [X, Y, Z, A, B, C, D, E]
      Index: []
      
      Empty DataFrame
      Columns: [A, B, C, D, E, X, Y, Z]
      Index: []
      

      【讨论】:

        【解决方案4】:

        一个显式的方法如下。请注意,我们首先想要的列实际上在哪里并不重要。

        # example setup
        cols = 'foo,bar,smth,smth_else,a,b,c,d,e'.split(',')
        df = pd.DataFrame(np.random.randint(0,10, size=(4, len(cols))), columns=cols)
        

        然后,说你首先想要的列是['a', 'b', 'c', 'd', 'e']

        first = ['a', 'b', 'c', 'd', 'e']
        
        out = df[first + [k for k in df.columns if k not in first]]
        
        # or:
        out = df[pd.Index(first).append(df.columns.difference(first))]
        
        
        >>> out
           a  b  c  d  e  foo  bar  smth  smth_else
        0  7  1  0  2  5    7    2     1          9
        1  6  7  7  4  3    7    3     1          2
        2  8  9  3  6  2    0    1     5          8
        3  1  2  0  3  3    2    4     1          4
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-12-17
          • 1970-01-01
          • 2016-10-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-28
          • 2013-09-14
          • 1970-01-01
          相关资源
          最近更新 更多