2017-07-08 173 views
0

这是我的数据集转换列表数据帧

enter image description here

我有一个奇怪的一个,我一直在努力了一个星期,现在需要一些帮助。我有一个这样类型的字典列表:

[index 0 : {'Total_Salary': 49900.0, 'Total_Value': 490.0, 
'pers_1': {'value': 71.1, 'Name': 'Bob', 'Salary': 10100, 'nick_name': 'foo'}, 
'pers_2': {'value': 43.1, 'Name': 'Joe', 'Salary': 9200, 'nick_name': 'bar'}} 
'pers_3': {'value': 42.1, 'Name': 'james', 'Salary': 9750, 'nick_name': 'sam'}} 
'pers_4': {'value': 41.1, 'Name': 'rick', 'Salary': 9700, 'nick_name': 'suzy'}} 
'pers_5': {'value': 23.1, 'Name': 'blop', 'Salary': 9400, 'nick_name': 'jill'}} 
'pers_6': {'value': 54.1, 'Name': 'burp', 'Salary': 9280, 'nick_name': 'yup'}} 

指数1:(将有不同的工资总额,总价值的数字,因为人们会改变,但格式保持不变如上) ... 索引n:'Total_Salary'= ...,'Total_Value'= ...,person_n ... ]

字典列表中的每个字典都有一个total_salary和total_value键。它是人1到人6前面每个人'工资'和'价值'的总和。该清单具有几百个类似上述附加的字典。我想遍历列表中的字典并将每个字典放入一个数据框中。

理想情况下,数据帧将被索引为Team 1作为索引(然后team 2,team 3等)。

+0

请您详细说明一下这个例子吗?它似乎不清楚你的字典的格式。 total_salary,total_value是否再次重复?请指定一个完整的例子。 –

+0

对不起,我总是很难解释,让我编辑... – DMan

+3

我会建议显示所需的输出,特别是因为你有一个**嵌套的**字典,它扩大了可能的解决方案的数量 – JohnE

回答

0
import pandas as pd 

team = { 
    'pers_1': {'value': 71.1, 'Name': 'Bob', 'Salary': 10100, 'nick_name': 'foo'}, 
    'pers_2': {'value': 43.1, 'Name': 'Joe', 'Salary': 9200, 'nick_name': 'bar'}, 
    'pers_3': {'value': 42.1, 'Name': 'james', 'Salary': 9750, 'nick_name': 'sam'}, 
    'pers_4': {'value': 41.1, 'Name': 'rick', 'Salary': 9700, 'nick_name': 'suzy'}, 
    'pers_5': {'value': 23.1, 'Name': 'blop', 'Salary': 9400, 'nick_name': 'jill'}, 
    'pers_6': {'value': 54.1, 'Name': 'burp', 'Salary': 9280, 'nick_name': 'yup'}} 

df = (pd.DataFrame(team) 
     .T 
     .append(pd.Series({'value': df['value'].sum(), 
         'Salary': df['Salary'].sum()}, 
         name='Total')) 
     .assign(team='team_1') 
     .set_index('team', append=True) 
     .swaplevel()) 

print(df) 

结果

   Name Salary nick_name value 
team           
team_1 pers_1 Bob 10100  foo 71.1 
     pers_2 Joe 9200  bar 43.1 
     pers_3 james 9750  sam 42.1 
     pers_4 rick 9700  suzy 41.1 
     pers_5 blop 9400  jill 23.1 
     pers_6 burp 9280  yup 54.1 
     Total  NaN 172290  NaN 823.8 

你可以做其他球队一样,再串接所有dataframes。在混合伪代码中:

all_teams_list = [] 
# loop for all teams 
    # create `df` 
    all_teams_list.append(df) 
all_teams = pd.concat(all_teams_list) 
+0

谢谢。我正在将它与现在的主程序绑定,将会更新。看起来像这样会做的伎俩,虽然... – DMan

+0

所以我在那里你的代码取得了一些进展,但我无法得到它执行多索引 – DMan

+0

新墨西哥州。 Gui9lherme的回答是正确的,数据在我打开的窗口中显示的方式导致我误导了数据的最终结构。谢谢您的帮助。 – DMan