IT

Pandas 데이터 프레임의 목록을 기준으로 색인된 행의 순서를 변경하는 방법

itgroup 2023. 9. 20. 20:17
반응형

Pandas 데이터 프레임의 목록을 기준으로 색인된 행의 순서를 변경하는 방법

다음과 같은 데이터 프레임이 있습니다.

company  Amazon  Apple  Yahoo
name
A             0    130      0
C           173      0      0
Z             0      0    150

다음 코드를 사용하여 작성되었습니다.

import pandas as pd
df = pd.DataFrame({'name' : ['A', 'Z','C'],
                   'company' : ['Apple', 'Yahoo','Amazon'],
                   'height' : [130, 150,173]})

df = df.pivot(index="name", columns="company", values="height").fillna(0)

행을 정렬하는 작업(인덱스 포함)name) 사전 정의된 목록에 따라:

["Z", "C", "A"]`

결과는 다음과 같습니다.

company  Amazon  Apple  Yahoo
name
Z             0      0    150
C           173      0      0
A             0    130      0

어떻게 하면 그것을 이룰 수 있을까요?

다음을 사용하여 미리 정의된 순서로 인덱스를 설정할 수 있습니다.reindex맘에 들다

In [14]: df.reindex(["Z", "C", "A"])
Out[14]:
company  Amazon  Apple  Yahoo
Z             0      0    150
C           173      0      0
A             0    130      0

하지만 알파벳 순서일 경우에는sort_index(ascending=False)

In [12]: df.sort_index(ascending=False)
Out[12]:
company  Amazon  Apple  Yahoo
name
Z             0      0    150
C           173      0      0
A             0    130      0

아래에 지적된 것처럼, 당신은 그것을 어떤 변수에 할당해야 합니다.

In [13]: df = df.sort_index(ascending=False)

우리는 또한 사용할 수 있습니다.loc:

lst = ["Z", "C", "A"]
df = df.loc[lst]

출력:

company  Amazon  Apple  Yahoo
name                         
Z             0      0    150
C           173      0      0
A             0    130      0

에 값이 있는 경우lst존재하지 않는df.index(예를 들어 만약에)lst=['Z','C','A','D']), 그 다음loc키 오류를 발생시킵니다(반면reindex새 행을 만듭니다.'D'NaN이 가득합니다).


다중 색인

한다면df다음과 같은 MultiIndex입니다.

           C3
C1 C2        
2  evelen   0
   ten      1
   twelve   2
1  evelen   3
   ten      4
   twelve   5

그리고 만약 당신이 두번째 레벨을 다음과 같이 분류하고 싶다면.ten,eleven그리고.twelve, 그 다음에 사용하기loc:

out = df.loc[:, ['ten','evelen', 'twelve'],:]

출력:

           C3
C1 C2        
2  evelen   0
   ten      1
   twelve   2
1  evelen   3
   ten      4
   twelve   5

두 수준 모두에 대해:

out = df.loc[[1,2], ['ten','evelen','twelve'], :]

출력:

           C3
C1 C2        
1  ten      4
   evelen   3
   twelve   5
2  ten      1
   evelen   0
   twelve   2

IMHO, 특히 여러 값으로 정렬하려면 다음과 같은 것이 가장 좋습니다.

df = df.set_index("C1")
df = df.sort_values(["C1", "C2"])
df.reset_index(inplace=True)

언급URL : https://stackoverflow.com/questions/30009948/how-to-reorder-indexed-rows-based-on-a-list-in-pandas-data-frame

반응형