具有值的多索引数据帧的字典列表列表

时间:2018-07-17 10:38:41

标签: python python-3.x pandas dictionary dataframe

我有一个字典列表列表,希望将其转换为数据框,但似乎无法使代码正常工作。

当前,这是我的示例列表

eglist = [[{'var1': False, 'name_id': 23, 'team': 0 , 'order':0},
           {'var1': False, 'name_id': 24, 'team': 0 , 'order':1}, 
           {'var1': False, 'name_id': 1, 'team': 0 , 'order':2}],
          [{'var1': False, 'name_id': 23, 'team': 0 , 'order':0},
           {'var1': False, 'name_id': 24, 'team': 0 , 'order':1}, 
           {'var1': False, 'name_id': 1, 'team': 0 , 'order':2}]]

较大的列表包含大约9000个字典列表。

我希望将其转换为

dfframe =  
      Order 0               Order 1                        Order 2 
0     var1  name_id  team   var1     name_id    team       var1   name_id    team
      False     23      0   False       24        0        False     1        0

1     var1  name_id  team   var1     name_id    team       var1   name_id    team`
      False     23      0   False       24        0        False     1        0

任何帮助都会很棒!我是一个初学者,因此不确定如何进行。

这是我删除的帖子的无关代码的重新发布。

1 个答案:

答案 0 :(得分:2)

您可以按照以下步骤操作:

  1. 使用collections.defaultdict通过order键聚合数据。
  2. pd.concat上使用axis=1转换为单个数据帧。
  3. 通过pd.MultiIndex向列添加级别。

这是一个演示:

from collections import defaultdict

# aggregate data by order
d = defaultdict(list)
for L in eglist:
    for row in L:
        d[row['order']].append([row['var1'], row['name_id'], row['team']])

# convert to dataframe
df = pd.concat([pd.DataFrame(v, columns=[f'{k}_var1', f'{k}_name_id', f'{k}_team'])
                for k, v in d.items()], axis=1)

# convert columns to MultiIndex
headers = [('Order '+col.split('_')[0], col.split('_')[-1]) for col in df.columns]
df.columns = pd.MultiIndex.from_tuples(headers, names=['Team', 'Data'])

print(df)

Team Order 0          Order 1          Order 2        
Data    var1  id team    var1  id team    var1 id team
0      False  23    0   False  24    0   False  1    0
1      False  23    0   False  24    0   False  1    0