판다 분류 101
sort
v0.20에서 DataFrame.sort_values
및 로 대체되었습니다 DataFrame.sort_index
. 이 외에도 argsort
.
다음은 정렬의 몇 가지 일반적인 사용 사례와 현재 API에서 정렬 기능을 사용하여 해결하는 방법입니다. 먼저 설정입니다.
# Setup
np.random.seed(0)
df = pd.DataFrame({'A': list('accab'), 'B': np.random.choice(10, 5)})
df
A B
0 a 7
1 c 9
2 c 3
3 a 5
4 b 2
단일 열로 정렬
예를 들어 df
"A"열 을 기준으로 정렬하려면 sort_values
단일 열 이름과 함께 사용합니다 .
df.sort_values(by='A')
A B
0 a 7
3 a 5
4 b 2
1 c 9
2 c 3
새로운 RangeIndex가 필요한 경우 DataFrame.reset_index
.
여러 열로 정렬
예를 들어, 기준으로 정렬 할 수 모두 에서 COL "A"와 "B" df
당신이 목록을 전달할 수 sort_values
:
df.sort_values(by=['A', 'B'])
A B
3 a 5
0 a 7
4 b 2
2 c 3
1 c 9
DataFrame 인덱스로 정렬
df2 = df.sample(frac=1)
df2
A B
1 c 9
0 a 7
2 c 3
3 a 5
4 b 2
다음을 사용하여이 작업을 수행 할 수 있습니다 sort_index
.
df2.sort_index()
A B
0 a 7
1 c 9
2 c 3
3 a 5
4 b 2
df.equals(df2)
# False
df.equals(df2.sort_index())
# True
성능과 비교 가능한 몇 가지 방법은 다음과 같습니다.
%timeit df2.sort_index()
%timeit df2.iloc[df2.index.argsort()]
%timeit df2.reindex(np.sort(df2.index))
605 µs ± 13.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
610 µs ± 24.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
581 µs ± 7.63 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
지수 목록으로 정렬
예를 들면
idx = df2.index.argsort()
idx
# array([0, 7, 2, 3, 9, 4, 5, 6, 8, 1])
이 "정렬"문제는 실제로 간단한 색인 문제입니다. 정수 레이블을 전달하면 iloc
됩니다.
df.iloc[idx]
A B
1 c 9
0 a 7
2 c 3
3 a 5
4 b 2