programing

열 이름을 기준으로 팬더 데이터프레임의 열 정렬

randomtip 2022. 9. 12. 11:24
반응형

열 이름을 기준으로 팬더 데이터프레임의 열 정렬

나는 가지고 있다dataframe200개 이상의 컬럼이 있습니다.이 문제는 생성된 그대로의 주문입니다.

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

반응형