とりあえず思いつく方法を2通り記述してみました。
(1) まずは定義した順番に並んでいるDataFrameを作成しておき、そこに元のDataFrameをnameで結合することで実現できると思います。
こんな感じ。
Python
1import pandas as pd
2
3df = pd.DataFrame({
4 'ID':[1,2,3,4],
5 'name':['AAA','BBB','CCC','DDD'],
6 'sex':['male','female','male','male']
7})
8
9order = ['CCC','BBB','AAA','DDD']
10
11df = pd.DataFrame(order,columns=['name']).join(df.set_index('name'), on='name')
12print(df)
13# name ID sex
14# 0 CCC 3 male
15# 1 BBB 2 female
16# 2 AAA 1 male
17# 3 DDD 4 male
(2) 元のDataFrameのnamecolumnに順番を定義したSeriesをmap()
し、その値でソートする。
Python
1import pandas as pd
2
3df = pd.DataFrame({
4 'ID':[1,2,3,4],
5 'name':['AAA','BBB','CCC','DDD'],
6 'sex':['male','female','male','male']
7})
8
9order = ['CCC','BBB','AAA','DDD']
10
11df['order'] = df['name'].map(pd.Series(range(len(order)), index=order))
12df = df.sort_values(by='order').drop('order',axis=1).reset_index(drop=True)
13print(df)
14# ID name sex
15# 0 3 CCC male
16# 1 2 BBB female
17# 2 1 AAA male
18# 3 4 DDD male
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/04 13:50