pandas和python对象dict之间的相互转换
pandas转化为dict-----df.to_dict(参数)
- 默认参数:“dict”:列标题作为外层dict键值 , 索引(行标题)作为内层dict键值
- 参数"list":列标题是外层dict键值,内层是list,没有了行标题
- 参数"split":{“index”:[],“columns”:[],“data”:[[]]},将index\columns分开来
- 参数"recods":外层是列表,内层是列标题为键值的列表
- 参数"index":与参数dict相反,行标题作为外层dict的键值,列标题作为内层dict键值
当上述都不满足的时候需要自定义pandas对象和dict对象之间的相互转化:
import pandas as pd
In [ ]:
df = pd.DataFrame([ ['wang','ha','2','5'], ['wang','ha1','3','52'], ['jian','hw','65','2'], ['jian','hw','65','2'], ['xian','hw','65','2'] ], columns=['name','i','j','k']) group_name = df.groupby('name') all_name = [i for i in group_name.groups.keys()] all_name
Out[ ]:
['jian', 'wang', 'xian']
In [ ]:
wang_dict = {} for key_name,value_name in group_name: print(key_name) print(value_name) group_i = value_name.groupby('i') for key_i,value_i in group_i: if key_name in wang_dict.keys(): if key_i in wang_dict[key_name].keys(): wang_dict[key_name][key_i].append(value_i.agg('sum').to_list()) else: wang_dict[key_name].update({key_i:[value_i.agg('sum').to_list()]}) else: wang_dict.update({key_name:{key_i:[value_i.agg('sum').to_list()]}})
Out[ ]:
jian name i j k 2 jian hw 65 2 3 jian hw 65 2 wang name i j k 0 wang ha 2 5 1 wang ha1 3 52 xian name i j k 4 xian hw 65 2 {'jian': {'hw': [['jianjian', 'hwhw', '6565', '22']]}, 'wang': {'ha': [['wang', 'ha', '2', '5']], 'ha1': [['wang', 'ha1', '3', '52']]}, 'xian': {'hw': [['xian', 'hw', '65', '2']]}}