[英]Filling in a stacked DataFrame with values from dictionary
我有一個包含 4 列的堆疊數據框,每列都需要一個特定的字典。 對於每一列,我希望各自的字典填寫它可以填寫的所有行。
這是數據框本身: https : //i.imgur.com/DJ1xHnc.png
而對於 LB 列,字典LB_data
必須填充它可以填充的所有值:
[{'Essendon': 1.32, 'St Kilda': 3.3},
{'Carlton': 5.0, 'Port Adelaide': 1.16},
{'Geelong Cats': 1.57, 'Melbourne': 2.36},
{'Greater Western Sydney': 2.75, 'West Coast Eagles': 1.44},
{'Brisbane': 1.95, 'North Melbourne': 1.85},
{'Hawthorn': 1.38, 'Western Bulldogs': 3.0},
{'Fremantle': 1.32, 'Gold Coast': 3.3}]
我試圖創建一個包含堆疊行的新字典,但是我不完全確定如何將其傳遞到 DataFrame 中:
{'Essendon v St Kilda': {'Essendon': 1.32, 'St Kilda': 3.3}, 'Carlton v Port Adelaide': {'Port Adelaide': 1.16, 'Carlton': 5.0}, 'Geelong Cats v Melbourne': {'Geelong Cats': 1.57, 'Melbourne': 2.36}, 'Greater Western Sydney v West Coast Eagles': {'West Coast Eagles': 1.44, 'Greater Western Sydney': 2.75}, 'Brisbane v North Melbourne': {'North Melbourne': 1.85, 'Brisbane': 1.95}, 'Hawthorn v Western Bulldogs': {'Hawthorn': 1.38, 'Western Bulldogs': 3.0}, 'Fremantle v Gold Coast': {'Gold Coast': 3.3, 'Fremantle': 1.32}}
其他 3 列也有類似的字典。
如何以數據可以輕松替換到 DataFrame 中的方式創建字典?
謝謝!
首先,您的數據應采用以下形式:
{column_1: {(l0_index_0, l1_index_0): value,
(l0_index_0, l1_index_1): value,
(l0_index_1, l1_index_0): value...
},
column_2: {l0_index_0...
}
...
}
例如:
data = {'LB': {('Brisbane v Port Adelaide', 'Brisbane'): 1, ('Brisbane v Port Adelaide', 'Port Adelaide'): 2,
('Fremantle v St Kilda', 'Fremantle'): 3, ('Fremantle v St Kilda', 'St Kilda'): 4},
'PB': {('Brisbane v Port Adelaide', 'Brisbane'): 5, ('Brisbane v Port Adelaide', 'Port Adelaide'): 6,
('Fremantle v St Kilda', 'Fremantle'): 7, ('Fremantle v St Kilda', 'St Kilda'): 8},
'SB': {('Brisbane v Port Adelaide', 'Brisbane'): 9, ('Brisbane v Port Adelaide', 'Port Adelaide'): 10,
('Fremantle v St Kilda', 'Fremantle'): 11, ('Fremantle v St Kilda', 'St Kilda'): 12},
'NEDS': {('Brisbane v Port Adelaide', 'Brisbane'): 13, ('Brisbane v Port Adelaide', 'Port Adelaide'): 14,
('Fremantle v St Kilda', 'Fremantle'): 15, ('Fremantle v St Kilda', 'St Kilda'): 16},
}
pd.DataFrame(data)
輸出:
LB PB SB NEDS
Brisbane v Port Adelaide Brisbane 1 5 9 13
Port Adelaide 2 6 10 14
Fremantle v St Kilda Fremantle 3 7 11 15
St Kilda 4 8 12 16
因此,由於您的輸入數據位於四個單獨的數據幀中,因此有必要以某種方式連接它們以遵守此格式。
使用LB_data
定義的LB_data
,我們可以定義一個簡單的函數將其轉換為所需格式的數據:
def transform(d):
keys = list(d)
combined = ' v '.join(keys)
return {(combined, key): value for key, value in d.items()}
pd.DataFrame({'LB': {k: v for datum in LB_data for k, v in transform(datum).items()}})
這給出了:
LB
Brisbane v North Melbourne Brisbane 1.95
North Melbourne 1.85
Carlton v Port Adelaide Carlton 5.00
Port Adelaide 1.16
Essendon v St Kilda Essendon 1.32
St Kilda 3.30
Fremantle v Gold Coast Fremantle 1.32
Gold Coast 3.30
Geelong Cats v Melbourne Geelong Cats 1.57
Melbourne 2.36
Greater Western Sydney v West Coast Eagles Greater Western Sydney 2.75
West Coast Eagles 1.44
Hawthorn v Western Bulldogs Hawthorn 1.38
Western Bulldogs 3.00
通過對其他輸入數據集執行相同的操作並連接結果,您可以獲得預期格式的數據幀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.