2017-07-08 170 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