2017-08-17 10 views
-1

これはgoogle babyname exerciseから作成した修正リストです。キーでリスト内の複数の辞書をソートする方法(google babyname exercise_modified)

[ 
[{'year': 1998}, {'rank': 1, 'boy': 'pic', 'girl': 'Emy'}, {'rank': 2, 
'boy': 'badf', 'girl': 'Hdf'}, ...{'rank': 1000, 'boy': 'Jal', 'girl': 
'Sky'}], 
[{'year': 1999}, {'rank': 1, 'boy': 'xic', 'girl': 'Ely'}, {'rank': 2, 
'boy': 'aacb', 'girl': 'Hah'}, ...{'rank': 1000, 'boy': 'Jal', 'girl': 
'Sky'}], 
[{'year': 1958}, {'rank': 1, 'boy': 'Mic', 'girl': 'Emy'}, {'rank': 2, 
'boy': 'caob', 'girl': 'Han'}, ...{'rank': 1000, 'boy': 'Jal', 'girl': 
'Sky'}], 
.... 
] 

このリストを別のキーで並べ替えるにはどうすればよいですか?こうした年、ランク....

+1

このデータはひどく構造化されることによってソート。 –

+1

年単位でソートする方法は、ランク付けやソートなどのソート方法とは少し異なります。何を試しましたか?私は、COLDSPEEDが言ったことよりも2番目になるでしょう---このデータはより良い構造になるでしょう。 – blacksite

+1

ようこそStackOverflowへ。投稿する前に問題を調査して解決しようとしていることが予想されます。特定の質問がある場合は、これまでに試したことの詳細と関連コードを[最小限で完全であり、検証可能な例](https://stackoverflow.com/help/mcve)に含める必要があります。 [Stack Overflowユーザーの研究努力の程度](https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users)と[ [良い質問をするにはどうすればいいですか](https://stackoverflow.com/help/how-to-ask) – FluffyKitten

答えて

1

として、私はsortを作るpandas DataFrameにリスト辞書を変換するには、例えば

LIST=[[{'year': 1998}, {'rank': 1, 'boy': 'pic', 'girl': 'Emy'}, {'rank': 2, 
'boy': 'badf', 'girl': 'Hdf'},{'rank': 1000, 'boy': 'Jal', 'girl': 
'Sky'}], 
[{'year': 1999}, {'rank': 1, 'boy': 'xic', 'girl': 'Ely'}, {'rank': 2, 
'boy': 'aacb', 'girl': 'Hah'},{'rank': 1000, 'boy': 'Jal', 'girl': 
'Sky'}], 
[{'year': 1958}, {'rank': 1, 'boy': 'Mic', 'girl': 'Emy'}, {'rank': 2,'boy': 'caob', 'girl': 'Han'},{'rank': 1000, 'boy': 'Jal', 'girl':'Sky'}]] 
DFLIST=[] 
for A in LIST: 
    DFLIST.append(pd.DataFrame(A).ffill().dropna()) 
NEWDF=pd.concat(DFLIST,axis=0).reset_index(drop=True) 

Out[540]: 
    boy girl rank year 
0 pic Emy  1.0 1998.0 
1 badf Hdf  2.0 1998.0 
2 Jal Sky 1000.0 1998.0 
3 xic Ely  1.0 1999.0 
4 aacb Hah  2.0 1999.0 
5 Jal Sky 1000.0 1999.0 
6 Mic Emy  1.0 1958.0 
7 caob Han  2.0 1958.0 
8 Jal Sky 1000.0 1958.0 

容易になる:ランク

NEWDF.sort_values(['year','rank'],ascending=[True,False]) 


Out[542]: 
    boy girl rank year 
8 Jal Sky 1000.0 1958.0 
7 caob Han  2.0 1958.0 
6 Mic Emy  1.0 1958.0 
2 Jal Sky 1000.0 1998.0 
1 badf Hdf  2.0 1998.0 
0 pic Emy  1.0 1998.0 
5 Jal Sky 1000.0 1999.0 
4 aacb Hah  2.0 1999.0 
3 xic Ely  1.0 1999.0 
+1

Brilliant!いい答え。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅありがとう〜:-) – Wen

+1

@Wenありがとうございました。 –

関連する問題