[python] Pandas 데이터 프레임에서 열 순서 설정

내 개인 취향에 따라 팬더 데이터 프레임의 열을 재정렬하는 방법이 있습니까 (예 : 알파벳순이나 숫자 순이 아니라 특정 규칙을 따르는 것과 비슷 함)?

간단한 예 :

frame = pd.DataFrame({
        'one thing':[1,2,3,4],
        'second thing':[0.1,0.2,1,2],
        'other thing':['a','e','i','o']})

다음을 생성합니다.

   one thing other thing  second thing
0          1           a           0.1
1          2           e           0.2
2          3           i           1.0
3          4           o           2.0

그러나 대신 다음과 같이합니다.

   one thing second thing  other thing
0          1           0.1           a
1          2           0.2           e
2          3           1.0           i
3          4           2.0           o

(이 경우에 특정하지 않고 일반적인 솔루션을 제공하십시오. 감사합니다.)



답변

열 이름을 입력하여 직접 순서를 선택하십시오. 이중 대괄호에 유의하십시오.

frame = frame[['column I want first', 'column I want second'...etc.]]


답변

이것을 사용할 수 있습니다 :

columnsTitles = ['onething', 'secondthing', 'otherthing']

frame = frame.reindex(columns=columnsTitles)


답변

다음은 내가 자주 사용하는 솔루션입니다. 수많은 열이 포함 된 대규모 데이터 세트가있는 경우 모든 열을 수동으로 재정렬하고 싶지는 않습니다.

자주 사용하는 처음 몇 개의 열을 순서대로 정렬하고 다른 모든 열은 그대로 두는 것이 가장 가능하고 가장 원할 가능성이 높은 작업입니다. 이것은 R의 일반적인 접근 방식입니다.df %>%select(one, two, three, everything())

따라서 먼저 정렬 할 열을 수동으로 입력하고 목록의 다른 모든 열 앞에 배치 할 수 있습니다 cols_to_order.

그런 다음 나머지 열을 결합하여 새 열 목록을 구성합니다.

new_columns = cols_to_order + (frame.columns.drop(cols_to_order).tolist())

그런 다음 new_columns제안 된 다른 솔루션을 사용할 수 있습니다 .

import pandas as pd
frame = pd.DataFrame({
    'one thing': [1, 2, 3, 4],
    'other thing': ['a', 'e', 'i', 'o'],
    'more things': ['a', 'e', 'i', 'o'],
    'second thing': [0.1, 0.2, 1, 2],
})

cols_to_order = ['one thing', 'second thing']
new_columns = cols_to_order + (frame.columns.drop(cols_to_order).tolist())
frame = frame[new_columns]

   one thing  second thing other thing more things
0          1           0.1           a           a
1          2           0.2           e           e
2          3           1.0           i           i
3          4           2.0           o           o


답변

다음과 같이 할 수도 있습니다. df = df[['x', 'y', 'a', 'b']]

import pandas as pd
frame = pd.DataFrame({'one thing':[1,2,3,4],'second thing':[0.1,0.2,1,2],'other thing':['a','e','i','o']})
frame = frame[['second thing', 'other thing', 'one thing']]
print frame
   second thing other thing  one thing
0           0.1           a          1
1           0.2           e          2
2           1.0           i          3
3           2.0           o          4

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

cols = list(df.columns.values)

출력은 다음과 같이 생성됩니다.

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

그러면 수동으로 쉽게 재배치 할 수 있습니다.


답변

사전 대신 목록으로 구성

frame = pd.DataFrame([
        [1, .1, 'a'],
        [2, .2, 'e'],
        [3,  1, 'i'],
        [4,  4, 'o']
    ], columns=['one thing', 'second thing', 'other thing'])

frame

   one thing  second thing other thing
0          1           0.1           a
1          2           0.2           e
2          3           1.0           i
3          4           4.0           o


답변

OrderedDict를 사용할 수도 있습니다.

In [183]: from collections import OrderedDict

In [184]: data = OrderedDict()

In [185]: data['one thing'] = [1,2,3,4]

In [186]: data['second thing'] = [0.1,0.2,1,2]

In [187]: data['other thing'] = ['a','e','i','o']

In [188]: frame = pd.DataFrame(data)

In [189]: frame
Out[189]:
   one thing  second thing other thing
0          1           0.1           a
1          2           0.2           e
2          3           1.0           i
3          4           2.0           o


답변

‘columns’매개 변수를 추가합니다.

frame = pd.DataFrame({
        'one thing':[1,2,3,4],
        'second thing':[0.1,0.2,1,2],
        'other thing':['a','e','i','o']},
        columns=['one thing', 'second thing', 'other thing']
)