【问题标题】:How to build a MultiIndex Pandas DataFrame from a nested dictionary with lists如何从带有列表的嵌套字典构建 MultiIndex Pandas DataFrame
【发布时间】:2018-05-05 02:16:24
【问题描述】:

我有以下字典。

d= {'key1': {'sub-key1': ['a','b','c','d','e']},
    'key2': {'sub-key2': ['1','2','3','5','8','9','10']}}

this 帖子的帮助下,我成功地将这个字典转换为DataFrame。

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

但是,我的 DataFrame 采用以下形式:

                  0  1  2  3  4     5     6
(key1, sub-key1)  a  b  c  d  e  None  None
(key2, sub-key2)  1  2  3  5  8     9    10

我可以使用元组作为索引值,但是我认为使用多级 DataFrame 会更好。诸如this one之类的帖子帮助我分两步创建它,但是我很难一步完成(即从最初的创建开始),因为字典中的列表以及之后的元组正在添加一个级别并发症。

【问题讨论】:

  • 那么您已经有了一个可行的解决方案并想改进您的代码?请发布您的工作解决方案,并使用codereview.stackexchange.com
  • 在您已经创建的内容上使用df.index = pd.MultiIndex.from_tuples(df.index)
  • @Zero 好久不见了。你去哪儿了?

标签: python pandas dictionary dataframe multi-index


【解决方案1】:

我认为你很接近,因为MultiIndex 可以使用MultiIndex.from_tuples 方法:

d = {(i,j): d[i][j] 
       for i in d.keys() 
       for j in d[i].keys()}

mux = pd.MultiIndex.from_tuples(d.keys())
df = pd.DataFrame(list(d.values()), index=mux)
print (df)
               0  1  2  3  4     5     6
key1 sub-key1  a  b  c  d  e  None  None
key2 sub-key2  1  2  3  5  8     9    10

感谢Zero 提供另一个解决方案:

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

df.index = pd.MultiIndex.from_tuples(df.index)
print (df)
               0  1  2  3  4     5     6
key1 sub-key1  a  b  c  d  e  None  None
key2 sub-key2  1  2  3  5  8     9    10

【讨论】:

  • 先生,我现在看到@Zero 的评论了。如果你更新答案,你可以添加他的名字
  • 一项改进。只需mux = pd.MultiIndex.from_tuples(d)。类似于 for k in dictionary... 迭代其键而不是键/值对的方式。
  • @Bharath 只是好奇为什么我们不在数据框内进行修改......而不是在字典中......
【解决方案2】:

我将使用stack 两级dict....

df=pd.DataFrame(d)

df.T.stack().apply(pd.Series)
Out[230]: 
               0  1  2  3  4    5    6
key1 sub-key1  a  b  c  d  e  NaN  NaN
key2 sub-key2  1  2  3  5  8    9   10

【讨论】:

  • @Bharath 也......我只是好奇......为什么我们需要修改字典......我个人不喜欢重建字典 ,,,
  • 可能是因为它的多索引方式,它会比转置和应用快得多
猜你喜欢
  • 1970-01-01
  • 2019-07-26
  • 2023-04-02
  • 2015-08-03
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 2020-12-26
  • 2017-12-26
相关资源
最近更新 更多