2017-07-04 14 views
1

データフレームを辞書に変換する方法は分かっていますが、任意のキー名を追加して辞書を作成する方法がわかりません。新しいキー名の辞書にパンダのデータフレームを変換する

私は以下のようなデータフレームを持っているとしましょう。

raw_data = {'regiment': ['Nighthawks', 'Nighthawks', 'Nighthawks', 'Nighthawks', 'Dragoons', 'Dragoons', 'Dragoons', 'Dragoons', 'Scouts', 'Scouts', 'Scouts', 'Scouts'], 
'company': ['1st', '1st', '2nd', '2nd', '1st', '1st', '2nd', '2nd','1st', '1st', '2nd', '2nd'], 
'name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Jacon', 'Ryaner', 'Sone', 'Sloan', 'Piger', 'Riani', 'Ali'], 
'preTestScore': [4, 24, 31, 2, 3, 4, 24, 31, 2, 3, 2, 3], 
'postTestScore': [25, 94, 57, 62, 70, 25, 94, 57, 62, 70, 62, 70]} 

df = pd.DataFrame(raw_data, columns = ['regiment', 'company', 'name', 'preTestScore', 'postTestScore']) 

df.head() 
Out[96]: 
    regiment company  name preTestScore postTestScore 
0 Nighthawks  1st Miller    4    25 
1 Nighthawks  1st Jacobson   24    94 
2 Nighthawks  2nd  Ali   31    57 
3 Nighthawks  2nd Milner    2    62 
4 Dragoons  1st  Cooze    3    70 

「名前」をグループ化して「preTestScore」で最大値を計算し、最後に次のように辞書を作成します。

{'Miller': {'maxTestScore': 4}, 
'Jacobson': {'maxTestScore': 24}, ...} 

ここでは、新しいキー名「maxTestScore」を追加しました。どのように私は任意のキー名でこれを達成することができますか?事前にありがとうございます。

答えて

2

あなたはgroupbydict comprehensionを使用することができます。

d = {k:{'maxTestScore':v.max()} for k,v in df.groupby('name')['preTestScore']} 
print (d) 

{'Piger': {'maxTestScore': 3}, 
'Milner': {'maxTestScore': 2}, 
'Sone': {'maxTestScore': 31}, 
'Jacon': {'maxTestScore': 4}, 
'Cooze': {'maxTestScore': 3}, 
'Sloan': {'maxTestScore': 2}, 
'Riani': {'maxTestScore': 2}, 
'Miller': {'maxTestScore': 4}, 
'Ali':  {'maxTestScore': 31}, 
'Ryaner': {'maxTestScore': 24}, 
'Jacobson':{'maxTestScore': 24}} 

別の解決策:

d = {k:{'maxTestScore':v} for k,v in df.groupby('name')['preTestScore'].max().iteritems()} 
print (d) 

{'Piger': {'maxTestScore': 3}, 
'Milner': {'maxTestScore': 2}, 
'Sone': {'maxTestScore': 31}, 
'Jacon': {'maxTestScore': 4}, 
'Cooze': {'maxTestScore': 3}, 
'Sloan': {'maxTestScore': 2}, 
'Riani': {'maxTestScore': 2}, 
'Miller': {'maxTestScore': 4}, 
'Ali':  {'maxTestScore': 31}, 
'Ryaner': {'maxTestScore': 24}, 
'Jacobson':{'maxTestScore': 24}} 
+0

感謝。それは簡単で機能します。短い長さと明快さのために2番目のソリューションを選択しました。 – user4279562

+0

あなたは厳しいですが、2番目はよかったので、私は解決策を交換します。 – jezrael

関連する問題