python – Pandas MultiIndex(超过2个级别)DataFrame到嵌套Dict / JSON

weixin_38051012 2019-09-12 11:49:43
这个问题类似于this one,但我想更进一步.是否有可能将解决方案扩展到更高级别的工作?多级数据帧’.to_dict()方法有一些很有前景的选项,但是大多数都会返回由元组索引的条目(即(A,0,0):274.0),而不是将它们嵌套在字典中. 有关我要完成的示例,请考虑此多索引数据框: data = {0: { ('A', 0, 0): 274.0, ('A', 0, 1): 19.0, ('A', 1, 0): 67.0, ('A', 1, 1): 12.0, ('B', 0, 0): 83.0, ('B', 0, 1): 45.0 }, 1: { ('A', 0, 0): 254.0, ('A', 0, 1): 11.0, ('A', 1, 0): 58.0, ('A', 1, 1): 11.0, ('B', 0, 0): 76.0, ('B', 0, 1): 56.0 } } df = pd.DataFrame(data).T df.index = ['entry1', 'entry2'] df # output: A B 0 1 0 0 1 0 1 0 1 entry1 274.0 19.0 67.0 12.0 83.0 45.0 entry2 254.0 11.0 58.0 11.0 76.0 56.0 你可以想象我们这里有很多记录,而不仅仅是两个,索引名称可能是更长的字符串.你怎么能把它变成嵌套的词典(或直接到JSON),看起来像这样: [ {'entry1': {'A': {0: {0: 274.0, 1: 19.0}, 1: {0: 67.0, 1: 12.0}}, 'B': {0: {0: 83.0, 1: 45.0}}}, 'entry2': {'A': {0: {0: 254.0, 1: 11.0}, 1: {0: 58.0, 1: 11.0}}, 'B': {0: {0: 76.0, 1: 56.0}}}} ] 我认为一些递归可能会有所帮助,可能像this这样,但到目前为止还没有成功.
...全文
457 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38058086 2019-09-12
  • 打赏
  • 举报
回复
所以,你真的需要做两件事: > df.to_dict()>将其转换为嵌套字典. df.to_dict(orient =’index’)为您提供索引为键的字典;它看起来像这样: >>> df.to_dict(orient='index') {'entry1': {('A', 0, 0): 274.0, ('A', 0, 1): 19.0, ('A', 1, 0): 67.0, ('A', 1, 1): 12.0, ('B', 0, 0): 83.0, ('B', 0, 1): 45.0}, 'entry2': {('A', 0, 0): 254.0, ('A', 0, 1): 11.0, ('A', 1, 0): 58.0, ('A', 1, 1): 11.0, ('B', 0, 0): 76.0, ('B', 0, 1): 56.0}} 现在你需要嵌套这个.这是一个骗局from Martijn Pieters: def nest(d: dict) -> dict: result = {} for key, value in d.items(): target = result for k in key[:-1]: # traverse all keys but the last target = target.setdefault(k, {}) target[key[-1]] = value return result 把这一切放在一起: def df_to_nested_dict(df: pd.DataFrame) -> dict: d = df.to_dict(orient='index') return {k: nest(v) for k, v in d.items()} 输出: >>> df_to_nested_dict(df) {'entry1': {'A': {0: {0: 274.0, 1: 19.0}, 1: {0: 67.0, 1: 12.0}}, 'B': {0: {0: 83.0, 1: 45.0}}}, 'entry2': {'A': {0: {0: 254.0, 1: 11.0}, 1: {0: 58.0, 1: 11.0}}, 'B': {0: {0: 76.0, 1: 56.0}}}}

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧