来自熊猫数据框嵌套字典的熊猫数据框

Posted

技术标签:

【中文标题】来自熊猫数据框嵌套字典的熊猫数据框【英文标题】:Pandas Dataframe from nested dictionary of pandas dataframes 【发布时间】:2021-02-15 22:52:57 【问题描述】:

我有一个包含 2 级键的字典,第二级的值是数据框:

my_dict = 
           'elem1':'day1': pd.DataFrame(columns=['Col1', 'Col2']),
                    'day2': pd.DataFrame(columns=['Col1', 'Col2'])
                   ,
           'elem2':'day1': pd.DataFrame(columns=['Col1', 'Col2']),
                    'day2': pd.DataFrame(columns=['Col1', 'Col2'])
                    'day3': pd.DataFrame(columns=['Col1', 'Col2'])
                   
          

如何将其转换为以下形式的多索引 pandas 数据框:

                 Col1    Col2
elem1    day1    ...      ...
         day2    ...      ...
elem2    day1    ...      ...
         day2    ...      ...

我已经查看了这些答案,但无法拼凑出一个解决方案:

Nested dictionary to multiindex dataframe where dictionary keys are column labels Nested Dictionary to MultiIndex pandas DataFrame (3 level) Construct pandas DataFrame from items in nested dictionary Convert list of dictionaries to a pandas DataFrame Nested dictionary to multiindex dataframe where dictionary keys are column labels

【问题讨论】:

【参考方案1】:

想法是通过两个键创建元组并传递给concatMultiIndex 的第三级是从原始DataFrames 的索引值创建的,如果需要,您可以将其删除:

my_dict = 
           'elem1':'day1': pd.DataFrame(1, columns=['Col1', 'Col2'], index=[1,2]),
                    'day2': pd.DataFrame(2, columns=['Col1', 'Col2'], index=[1,2])
                   ,
           'elem2':'day1': pd.DataFrame(3, columns=['Col1', 'Col2'], index=[1,2]),
                    'day2': pd.DataFrame(4, columns=['Col1', 'Col2'], index=[1,2]),
                    'day3': pd.DataFrame(5, columns=['Col1', 'Col2'], index=[1,2])
                   
          

d = (k1, k2): v2 for k1, v1 in my_dict.items() for k2, v2 in v1.items()
print (d)
('elem1', 'day1'):    Col1  Col2
1     1     1
2     1     1, ('elem1', 'day2'):    Col1  Col2
1     2     2
2     2     2, ('elem2', 'day1'):    Col1  Col2
1     3     3
2     3     3, ('elem2', 'day2'):    Col1  Col2
1     4     4
2     4     4, ('elem2', 'day3'):    Col1  Col2
1     5     5
2     5     5

df = pd.concat(d, sort=False)
print (df)
              Col1  Col2
elem1 day1 1     1     1
           2     1     1
      day2 1     2     2
           2     2     2
elem2 day1 1     3     3
           2     3     3
      day2 1     4     4
           2     4     4
      day3 1     5     5
           2     5     5

df = pd.concat(d, sort=False).reset_index(level=2, drop=True)
print (df)
            Col1  Col2
elem1 day1     1     1
      day1     1     1
      day2     2     2
      day2     2     2
elem2 day1     3     3
      day1     3     3
      day2     4     4
      day2     4     4
      day3     5     5
      day3     5     5

【讨论】:

很好的答案,我只需要修改以下行:df = pd.concat(d, sort=False),因为我想要一个特定的专栏预先【参考方案2】:

试试这样:

my_dict = 
           'elem1':'day1': pd.DataFrame(columns=['Col1', 'Col2']),
                    'day2': pd.DataFrame(columns=['Col1', 'Col2'])
                   ,
           'elem2':'day1': pd.DataFrame(columns=['Col1', 'Col2']),
                    'day2': pd.DataFrame(columns=['Col1', 'Col2'])
                    'day3': pd.DataFrame(columns=['Col1', 'Col2'])
                   
          
nd = 
for x in my_dict:
  nd.update(my_dict[x])
df = pd.DataFrame(nd,index=my_dict.keys())

【讨论】:

以上是关于来自熊猫数据框嵌套字典的熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

从嵌套字典构造熊猫多索引数据框

从熊猫数据框创建嵌套字典

如何使用熊猫从嵌套字典创建数据框?

从嵌套字典列表中获取熊猫数据框

从熊猫数据框中提取嵌套字典

从几个嵌套字典制作熊猫数据框