将pandas数据帧转换为具有新键名的字典

时间:2017-07-04 09:15:28

标签: python pandas dictionary dataframe

我知道如何将数据框转换为字典,但我不确定如何创建添加了任意键名的字典。

我们假设我有一个如下数据框。

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'。我怎么能用任意键名来实现这一点?非常感谢你。

1 个答案:

答案 0 :(得分:2)

您可以将groupbyd = {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}}

另一种解决方案:

max packet size