열 이름을 기준으로 팬더 데이터프레임의 열 정렬
나는 가지고 있다dataframe
200개 이상의 컬럼이 있습니다.이 문제는 생성된 그대로의 주문입니다.
['Q1.3','Q6.1','Q1.2','Q1.1',......]
다음과 같이 열을 정렬해야 합니다.
['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]
Python에서 이것을 할 수 있는 방법이 있나요?
df = df.reindex(sorted(df.columns), axis=1)
열 이름을 정렬하면 원하는 순서가 지정된다고 가정합니다.열 이름이 사전 편찬으로 정렬되지 않는 경우(예: 열 Q10.3이 Q9.1 이후에 표시되도록 하려면) 다르게 정렬해야 하지만 팬더와는 관련이 없습니다.
또한 보다 간결하게 수행할 수 있습니다.
df.sort_index(axis=1)
결과를 다시 할당해야 합니다.
df = df.sort_index(axis=1)
또는, 인스톨 합니다.
df.sort_index(axis=1, inplace=True)
다음 작업을 수행할 수 있습니다.
df[df.df]
편집: 짧게는
df[sorted(df)]
여러 열의 경우 원하는 열을 정렬할 수 있습니다.
#['A', 'B', 'C'] <-this is your columns order
df = df[['C', 'B', 'A']]
다음 예제에서는 열을 정렬 및 슬라이스하는 방법을 보여 줍니다.
d = {'col1':[1, 2, 3], 'col2':[4, 5, 6], 'col3':[7, 8, 9], 'col4':[17, 18, 19]}
df = pandas.DataFrame(d)
다음과 같은 이점을 얻을 수 있습니다.
col1 col2 col3 col4
1 4 7 17
2 5 8 18
3 6 9 19
그럼 다음 작업을 수행합니다.
df = df[['col3', 'col2', 'col1']]
결과:
col3 col2 col1
7 4 1
8 5 2
9 6 3
Tweet의 답변은 위의 BrenBarn의 답변에 전달될 수 있습니다.
data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)
예를 들어 다음과 같습니다.
vals = randint(low=16, high=80, size=25).reshape(5,5)
cols = ['Q1.3', 'Q6.1', 'Q1.2', 'Q9.1', 'Q10.2']
data = DataFrame(vals, columns = cols)
다음과 같은 이점을 얻을 수 있습니다.
data
Q1.3 Q6.1 Q1.2 Q9.1 Q10.2
0 73 29 63 51 72
1 61 29 32 68 57
2 36 49 76 18 37
3 63 61 51 30 31
4 36 66 71 24 77
그럼 다음 작업을 수행합니다.
data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)
결과:
data
Q1.2 Q1.3 Q6.1 Q9.1 Q10.2
0 2 0 1 3 4
1 7 5 6 8 9
2 2 0 1 3 4
3 2 0 1 3 4
4 2 0 1 3 4
정렬된 시퀀스 대신 임의 시퀀스가 필요한 경우 다음을 수행할 수 있습니다.
sequence = ['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]
your_dataframe = your_dataframe.reindex(columns=sequence)
저는 이것을 2.7.10에서 테스트했는데 효과가 있었습니다.
Wes의 답변에 "inplace=True"를 추가하거나 결과를 새 DataFrame으로 설정하는 것을 잊지 마십시오.
df.sort_index(axis=1, inplace=True)
가장 빠른 방법은 다음과 같습니다.
df.sort_index(axis=1)
그러면 새 인스턴스가 생성됩니다.따라서 결과를 새 변수에 저장해야 합니다.
sortedDf=df.sort_index(axis=1)
그sort
방법 및sorted
함수를 사용하면 비교에 사용되는 키를 추출하는 커스텀 함수를 제공할 수 있습니다.
>>> ls = ['Q1.3', 'Q6.1', 'Q1.2']
>>> sorted(ls, key=lambda x: float(x[1:]))
['Q1.2', 'Q1.3', 'Q6.1']
사용 예 중 하나는 (일부) 컬럼에 프레픽스를 붙여서 이름을 붙이는 경우입니다.컬럼은 모두 특정 순서로 정렬됩니다(알파벳순이 아닙니다).
예를 들어, 모든 기능을 다음과 같이 시작할 수 있습니다.Ft_
, 라벨Lbl_
고정되지 않은 모든 열을 먼저 선택한 다음 모든 피쳐, 레이블 순으로 지정합니다.이 작업은 다음 기능으로 수행할 수 있습니다(사용 시 발생할 수 있는 효율성 문제에 유의합니다).sum
목록을 줄일 수 있지만 열이 많지 않으면 문제가 되지 않습니다.
def sortedcols(df, groups = ['Ft_', 'Lbl_'] ):
return df[ sum([list(filter(re.compile(r).search, list(df.columns).copy())) for r in (lambda l: ['^(?!(%s))' % '|'.join(l)] + ['^%s' % i for i in l ] )(groups) ], []) ]
print df.sort_index(by='Frequency',ascending=False)
여기서 by는 열을 기준으로 데이터 세트를 정렬하는 경우 열의 이름입니다.
언급URL : https://stackoverflow.com/questions/11067027/sorting-columns-in-pandas-dataframe-based-on-column-name
'programing' 카테고리의 다른 글
1개의 쿼리로 여러 개의 문을 노드 검출 (0) | 2022.09.12 |
---|---|
데이터베이스의 관점에서 REFRESH와 MERGE는 무엇을 의미합니까? (0) | 2022.09.12 |
MySQL - 조건부 외부 키 제약사항 (0) | 2022.09.12 |
Quota Exceeded Error: 돔 예외 22: 할당량을 초과하는 항목을 스토리지에 추가하려고 했습니다. (0) | 2022.09.12 |
vuex 알 수 없는 로컬 변환 유형: updateValue, 글로벌 유형: app/updateValue.돌연변이가 작동하지 않음 (0) | 2022.09.12 |