복붙노트

[PYTHON] 판다 열 순서를 재 배열하는 방법?

PYTHON

판다 열 순서를 재 배열하는 방법?

>>> 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'열을 첫 번째 열과 두 번째 열로 만드는 열 순서를 재정렬하려고합니다.

>>> 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

그러나 긴 열 'a', 'b', 'c', 'd'.....가 있으면 열을 명시 적으로 나열하고 싶지 않습니다. 어떻게해야합니까?

또는 판다는 set_column_sequence (dataframe, col_name, seq)와 같은 함수를 제공하여 set_column_sequence (df, 'x', 0) 및 set_column_sequence (df, 'y', 1)를 수행 할 수 있습니까?

해결법

  1. ==============================

    1.다음과 같이 할 수도 있습니다.

    다음과 같이 할 수도 있습니다.

    df = df[['x', 'y', 'a', 'b']]
    

    다음을 사용하여 열 목록을 가져올 수 있습니다.

    cols = list(df.columns.values)
    

    출력 결과는 다음과 같습니다.

    ['a', 'b', 'x', 'y']
    

    ... 그러면 첫 번째 함수에 놓기 전에 수동으로 다시 정렬하기 쉽습니다.

  2. ==============================

    2.우아한 기본 제공 기능이있을 수 있지만 (아직 찾지 못했습니다). 당신은 하나를 쓸 수 있습니다 :

    우아한 기본 제공 기능이있을 수 있지만 (아직 찾지 못했습니다). 당신은 하나를 쓸 수 있습니다 :

    # 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"로 전달하십시오.

  3. ==============================

    3.

    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
    
  4. ==============================

    4.다음을 수행 할 수 있습니다.

    다음을 수행 할 수 있습니다.

    df =DataFrame({'a':[1,2,3,4],'b':[2,4,6,8]})
    
    df['x']=df.a + df.b
    df['y']=df.a - df.b
    

    이런 식으로 원하는 순서대로 열 제목을 만듭니다.

    column_titles = ['x','y','a','b']
    
    df.reindex(columns=column_titles)
    

    이렇게하면 원하는 출력을 얻을 수 있습니다.

  5. ==============================

    5.나는 당신이 아마도 drop (column을 삭제하기 위해)을 사용하고 position에 컬럼을 삽입하기 위해 insert를 사용한다고 말하는 것을하기위한 함수를 작성하기를 제안한다. 설명하는 것을 수행 할 기존 API 함수가 없습니다.

    나는 당신이 아마도 drop (column을 삭제하기 위해)을 사용하고 position에 컬럼을 삽입하기 위해 insert를 사용한다고 말하는 것을하기위한 함수를 작성하기를 제안한다. 설명하는 것을 수행 할 기존 API 함수가 없습니다.

  6. ==============================

    6.색인에서 목록을 뺀 것이 원래 색인의 순서를 유지하지 않는다면이 솔루션을 무시해도 좋습니다.

    색인에서 목록을 뺀 것이 원래 색인의 순서를 유지하지 않는다면이 솔루션을 무시해도 좋습니다.

    In [61]: df.reindex(columns=pd.Index(['x', 'y']).append(df.columns - ['x', 'y']))
    Out[61]: 
        x  y  a  b
    0   3 -1  1  2
    1   6 -2  2  4
    2   9 -3  3  6
    3  12 -4  4  8
    
  7. from https://stackoverflow.com/questions/12329853/how-to-rearrange-pandas-column-sequence by cc-by-sa and MIT license