[python] DataFrame 열의 순서를 변경하는 방법은 무엇입니까?

나는 다음과 같은 것을 가지고있다 DataFrame( df) :

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(10, 5))

할당을 통해 더 많은 열을 추가합니다.

df['mean'] = df.mean(1)

mean을 앞으로 이동시키는 방법 , 즉 다른 열의 순서를 그대로 유지하면서 첫 번째 열로 설정하는 방법은 무엇입니까?



답변

한 가지 쉬운 방법은 필요에 따라 재정렬 된 열 목록을 사용하여 데이터 프레임을 다시 할당하는 것입니다.

이것이 당신이 지금 가진 것입니다 :

In [6]: df
Out[6]:
          0         1         2         3         4      mean
0  0.445598  0.173835  0.343415  0.682252  0.582616  0.445543
1  0.881592  0.696942  0.702232  0.696724  0.373551  0.670208
2  0.662527  0.955193  0.131016  0.609548  0.804694  0.632596
3  0.260919  0.783467  0.593433  0.033426  0.512019  0.436653
4  0.131842  0.799367  0.182828  0.683330  0.019485  0.363371
5  0.498784  0.873495  0.383811  0.699289  0.480447  0.587165
6  0.388771  0.395757  0.745237  0.628406  0.784473  0.588529
7  0.147986  0.459451  0.310961  0.706435  0.100914  0.345149
8  0.394947  0.863494  0.585030  0.565944  0.356561  0.553195
9  0.689260  0.865243  0.136481  0.386582  0.730399  0.561593

In [7]: cols = df.columns.tolist()

In [8]: cols
Out[8]: [0L, 1L, 2L, 3L, 4L, 'mean']

cols원하는 방식으로 재 배열 하십시오. 이것이 마지막 요소를 첫 번째 위치로 옮긴 방법입니다.

In [12]: cols = cols[-1:] + cols[:-1]

In [13]: cols
Out[13]: ['mean', 0L, 1L, 2L, 3L, 4L]

그런 다음 데이터 프레임을 다음과 같이 재정렬하십시오.

In [16]: df = df[cols]  #    OR    df = df.ix[:, cols]

In [17]: df
Out[17]:
       mean         0         1         2         3         4
0  0.445543  0.445598  0.173835  0.343415  0.682252  0.582616
1  0.670208  0.881592  0.696942  0.702232  0.696724  0.373551
2  0.632596  0.662527  0.955193  0.131016  0.609548  0.804694
3  0.436653  0.260919  0.783467  0.593433  0.033426  0.512019
4  0.363371  0.131842  0.799367  0.182828  0.683330  0.019485
5  0.587165  0.498784  0.873495  0.383811  0.699289  0.480447
6  0.588529  0.388771  0.395757  0.745237  0.628406  0.784473
7  0.345149  0.147986  0.459451  0.310961  0.706435  0.100914
8  0.553195  0.394947  0.863494  0.585030  0.565944  0.356561
9  0.561593  0.689260  0.865243  0.136481  0.386582  0.730399


답변

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

df = df[['mean', '0', '1', '2', '3']]

다음을 사용하여 열 목록을 얻을 수 있습니다.

cols = list(df.columns.values)

출력은 다음을 생성합니다.

['0', '1', '2', '3', 'mean']

… 그러면 첫 번째 기능에 드롭하기 전에 수동으로 재배치하기가 쉽습니다.


답변

원하는 순서대로 열 이름을 지정하십시오.

In [39]: df
Out[39]:
          0         1         2         3         4  mean
0  0.172742  0.915661  0.043387  0.712833  0.190717     1
1  0.128186  0.424771  0.590779  0.771080  0.617472     1
2  0.125709  0.085894  0.989798  0.829491  0.155563     1
3  0.742578  0.104061  0.299708  0.616751  0.951802     1
4  0.721118  0.528156  0.421360  0.105886  0.322311     1
5  0.900878  0.082047  0.224656  0.195162  0.736652     1
6  0.897832  0.558108  0.318016  0.586563  0.507564     1
7  0.027178  0.375183  0.930248  0.921786  0.337060     1
8  0.763028  0.182905  0.931756  0.110675  0.423398     1
9  0.848996  0.310562  0.140873  0.304561  0.417808     1

In [40]: df = df[['mean', 4,3,2,1]]

이제 ‘평균’열이 앞에 나옵니다.

In [41]: df
Out[41]:
   mean         4         3         2         1
0     1  0.190717  0.712833  0.043387  0.915661
1     1  0.617472  0.771080  0.590779  0.424771
2     1  0.155563  0.829491  0.989798  0.085894
3     1  0.951802  0.616751  0.299708  0.104061
4     1  0.322311  0.105886  0.421360  0.528156
5     1  0.736652  0.195162  0.224656  0.082047
6     1  0.507564  0.586563  0.318016  0.558108
7     1  0.337060  0.921786  0.930248  0.375183
8     1  0.423398  0.110675  0.931756  0.182905
9     1  0.417808  0.304561  0.140873  0.310562


답변


답변

귀하의 경우

df = df.reindex(columns=['mean',0,1,2,3,4])

당신이 원하는 것을 정확하게 할 것입니다.

제 경우에는 (일반적인 형태) :

df = df.reindex(columns=sorted(df.columns))
df = df.reindex(columns=(['opened'] + list([a for a in df.columns if a != 'opened']) ))


답변

원하는 순서대로 새 열 목록을 만든 다음 df = df[cols]이 새 순서로 열을 다시 정렬해야합니다.

cols = ['mean']  + [col for col in df if col != 'mean']
df = df[cols]

보다 일반적인 접근 방식을 사용할 수도 있습니다. 이 예에서는 마지막 열 (-1로 표시)이 첫 번째 열로 삽입됩니다.

cols = [df.columns[-1]] + [col for col in df if col != df.columns[-1]]
df = df[cols]

열이 DataFrame에있는 경우 원하는 순서로 열을 재정렬하기 위해이 방법을 사용할 수도 있습니다.

inserted_cols = ['a', 'b', 'c']
cols = ([col for col in inserted_cols if col in df]
        + [col for col in df if col not in inserted_cols])
df = df[cols]


답변

import numpy as np
import pandas as pd
df = pd.DataFrame()
column_names = ['x','y','z','mean']
for col in column_names:
    df[col] = np.random.randint(0,100, size=10000)

다음 해결책을 시도해 볼 수 있습니다.

해결책 1 :

df = df[ ['mean'] + [ col for col in df.columns if col != 'mean' ] ]

해결책 2 :


df = df[['mean', 'x', 'y', 'z']]

해결책 3 :

col = df.pop("mean")
df = df.insert(0, col.name, col)

해결책 4 :

df.set_index(df.columns[-1], inplace=True)
df.reset_index(inplace=True)

해결책 5 :

cols = list(df)
cols = [cols[-1]] + cols[:-1]
df = df[cols]

해결책 6 :

order = [1,2,3,0] # setting column's order
df = df[[df.columns[i] for i in order]]

시간 비교 :

해결책 1 :

CPU 시간 : 사용자 1.05ms, 시스템 : 35µs, 총계 : 1.08ms 월 시간 : 995µs

해결책 2 :

CPU 시간 : 사용자 933 µs, sys : 0 ns, 총계 : 933 µs 월 시간 : 800 µs

해결책 3 :

CPU 시간 : 사용자 0ns, sys : 1.35ms, 총계 : 1.35ms 월 시간 : 1.08ms

해결책 4 :

CPU 시간 : 사용자 1.23ms, 시스템 : 45µs, 총계 : 1.27ms 월 시간 : 986µs

해결책 5 :

CPU 시간 : 사용자 1.09ms, 시스템 : 19µs, 총계 : 1.11ms 월 타임 : 949µs

해결책 6 :

CPU 시간 : 사용자 955µs, 시스템 : 34µs, 총계 : 989µs 월 시간 : 859µs