パンダの選別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