在数据处理时,时常需要将数据表的两列转化为字典映射形式
df[[‘A’,‘B’]] -----> dict(key:A, value:B)
方法一:使用zip
d = dict(zip(df['A'],df['B']))
import pandas as pd
import numpy as np
test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'gender':[0,1,0,1,0,0],
'math':[90,89,99,78,97,93]}
df = pd.DataFrame.from_dict(test_dict)
print(df)
'''
id name gender math
0 1 Alice 0 90
1 2 Bob 1 89
2 3 Cindy 0 99
3 4 Eric 1 78
4 5 Helen 0 97
5 6 Grace 0 93
'''
dict(zip(df['id'],df['math']))
# {1: 90, 2: 89, 3: 99, 4: 78, 5: 97, 6: 93}
方法二:将A设为索引后,转字典
d = df.set_index('A')['B'].to_dict()
d = df.set_index('id')['math'].to_dict()
# {1: 90, 2: 89, 3: 99, 4: 78, 5: 97, 6: 93}
建议使用方法二,速度更快。
实际问题中,常需要将原始表df,按某种方式聚合得到df2,需要得到df2的两列字典。可以直接联合使用 聚合groupby,agg和to_dict函数。
d = df.groupby('A')['B'].mean().to_dict()
如何得到不同性别的平均成绩字典
d = df.groupby('gender')['math'].mean().to_dict()
# {0: 94.75, 1: 83.5}
`
参考:What is the most efficient way to create a dictionary of two pandas Dataframe columns
|