나는 다음과 같은 것을 가지고있다 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.insert(0, 'mean', df.mean(1))
http://pandas.pydata.org/pandas-docs/stable/dsintro.html#column-selection-addition-deletion
답변
귀하의 경우
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