首页 > 后端开发 > Python教程 > 如何从具有分层索引的嵌套字典创建 Pandas DataFrame?

如何从具有分层索引的嵌套字典创建 Pandas DataFrame?

DDD
发布: 2024-12-02 03:30:13
原创
158 人浏览过

How to Create a Pandas DataFrame from a Nested Dictionary with Hierarchical Indexes?

从具有分层索引的嵌套字典中的项目构造 Pandas DataFrame

在这种情况下,您希望从层次结构由以下内容组成的嵌套字典创建 pandas DataFrame :

  • 1 级:用户ID
  • 第 2 级:类别
  • 第 3 级:分类属性

所需的 DataFrame 应该以用户 ID 作为索引,以类别和属性作为列。

利用 Pandas MultiIndex

一种有效的方法利用 pandas MultiIndex,可以创建多级索引结构。要使用此方法:

  1. 重塑输入字典以使用元组作为键,与所需的 MultiIndex 值对齐。
  2. 使用 pd.DataFrame.from_dict 构造 DataFrame,指定 orient= 'index' 将数据与定义的元组键对齐。
user_dict = {12: {'Category 1': {'att_1': 1, 'att_2': 'whatever'},
                  'Category 2': {'att_1': 23, 'att_2': 'another'}},
             15: {'Category 1': {'att_1': 10, 'att_2': 'foo'},
                  'Category 2': {'att_1': 30, 'att_2': 'bar'}}}

df = pd.DataFrame.from_dict({(i,j): user_dict[i][j] 
                           for i in user_dict.keys() 
                           for j in user_dict[i].keys()},
                       orient='index')

print(df)



               att_1     att_2
12 Category 1      1  whatever
   Category 2     23   another
15 Category 1     10       foo
   Category 2     30       bar
登录后复制

方法通过串联

或者,您可以通过串联逐步构建 DataFrame:

  1. 提取用户 ID 并创建一个空列表来存储组件数据帧。
  2. 迭代字典,为每个用户创建一个数据框并将其添加到列表中。
  3. 连接组件使用 pd.concat 的数据帧,按用户 ID 进行索引。
user_ids = []
frames = []

for user_id, d in user_dict.iteritems():
    user_ids.append(user_id)
    frames.append(pd.DataFrame.from_dict(d, orient='index'))

df = pd.concat(frames, keys=user_ids)

print(df)


               att_1     att_2
12 Category 1      1  whatever
   Category 2     23   another
15 Category 1     10       foo
   Category 2     30       bar
登录后复制

以上是如何从具有分层索引的嵌套字典创建 Pandas DataFrame?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板