このようなデータフレームがあります。
print(df)
0 1 2
0 354.7 April 4.0
1 55.4 August 8.0
2 176.5 December 12.0
3 95.5 February 2.0
4 85.6 January 1.0
5 152 July 7.0
6 238.7 June 6.0
7 104.8 March 3.0
8 283.5 May 5.0
9 278.8 November 11.0
10 249.6 October 10.0
11 212.7 September 9.0
ご覧のとおり、月はカレンダー順に並んでいません。そこで、各月に対応する月番号(1〜12)を取得するために2番目の列を作成しました。そこから、このデータフレームを暦月順に並べ替えるにはどうすればよいですか。
sort_values
を使用して、特定の列の値でdfをソートします。
In [18]:
df.sort_values('2')
Out[18]:
0 1 2
4 85.6 January 1.0
3 95.5 February 2.0
7 104.8 March 3.0
0 354.7 April 4.0
8 283.5 May 5.0
6 238.7 June 6.0
5 152.0 July 7.0
1 55.4 August 8.0
11 212.7 September 9.0
10 249.6 October 10.0
9 278.8 November 11.0
2 176.5 December 12.0
2列でソートしたい場合は、列ラベルのリストをsort_values
に渡し、列ラベルをソートの優先順位に従って並べます。 df.sort_values(['2', '0'])
を使用すると、結果は列2
、次に列0
でソートされます。 df['2']
の各値は一意であるため、これは実際にはこの例では意味がありません。
私は上記の解決策を試しましたが、結果が得られませんでした、それで私は私のために働く別の解決策を見つけました。 昇順= False は、データフレームを 降順 order、 の順に並べます。デフォルトでは、True です。私はPython 3.6.6とパンダ0.23.4のバージョンを使っています。
final_df = df.sort_values(by=['2'], ascending=False)
詳細はパンダのドキュメント here で見ることができます。
データに操作を追加するだけです。データフレームdf
があるとすると、希望の出力を得るためにいくつかの操作を実行できます。
ID cost tax label
1 216590 1600 test
2 523213 1800 test
3 250 1500 experiment
df['label'].value_counts().to_frame().reset_index()).sort_values('label', ascending=False)
ラベルのsorted
出力をdataframe
として与える
index label
0 test 2
1 experiment 1
別の解決策と同じように:
文字列データ(月名)を分類し、次のように並べ替えることができます。
df.rename(columns={1:'month'},inplace=True)
df['month'] = pd.Categorical(df['month'],categories=['December','November','October','September','August','July','June','May','April','March','February','January'],ordered=True)
df = df.sort_values('month',ascending=False)
Categorical
オブジェクトの作成時に言ったように、月名でソートされたデータを取得します。