1
我試圖將以下字典轉換爲適合查看眼睛的DataFrame格式。該數據字典是在訪問api和解析XML之後創建的,所以我肯定願意以不同的方式將數據放在一起,以簡化過程。將字典轉換爲包含分層索引和列的Pandas DataFrame
我的格式是這樣的(與其它兩個市場未圖示的水平放置在彼此的旁邊):
Market1
B S
Depth1 Depth2 Depth3 Depth1 Depth2 Depth3
actionIndicator B B B S S S
limit 589 588 586 591 592 593
quantity 185.121 8.121 32.216 34.805 16.037 36.099
我想是(未示出應該被垂直堆疊的兩個市場和音符重新格式深度-ordering):
B S
Depth3 Depth2 Depth1 Depth1 Depth2 Depth3
Market1 actionIndicator B B B S S S
limit 587 588 589 591 592 593
quantity 185.121 8.121 32.216 34.805 16.037 36.099
代碼:
from pandas import DataFrame
data = {
'Market1': {'B': {'Depth1': {'actionIndicator': 'B',
'limit': '558',
'quantity': '8.286'},
'Depth2': {'actionIndicator': 'B', 'limit': '557', 'quantity': '8.355'},
'Depth3': {'actionIndicator': 'B', 'limit': '555', 'quantity': '18.474'}},
'S': {'Depth1': {'actionIndicator': 'S',
'limit': '560',
'quantity': '0.626'},
'Depth2': {'actionIndicator': 'S', 'limit': '561', 'quantity': '17.101'},
'Depth3': {'actionIndicator': 'S', 'limit': '562', 'quantity': '17.576'}}},
'Market2': {'B': {'Depth1': {'actionIndicator': 'B',
'limit': '478',
'quantity': '8.182'},
'Depth2': {'actionIndicator': 'B', 'limit': '477', 'quantity': '8.329'},
'Depth3': {'actionIndicator': 'B', 'limit': '475', 'quantity': '30.156'}},
'S': {'Depth1': {'actionIndicator': 'S',
'limit': '479',
'quantity': '37.483'},
'Depth2': {'actionIndicator': 'S', 'limit': '480', 'quantity': '84.416'},
'Depth3': {'actionIndicator': 'S', 'limit': '481', 'quantity': '37.659'}}},
'Market3': {'B': {'Depth1': {'actionIndicator': 'B',
'limit': '587',
'quantity': '8.18'},
'Depth2': {'actionIndicator': 'B', 'limit': '586', 'quantity': '8.382'},
'Depth3': {'actionIndicator': 'B', 'limit': '583', 'quantity': '39.548'}},
'S': {'Depth1': {'actionIndicator': 'S',
'limit': '589',
'quantity': '55.181'},
'Depth2': {'actionIndicator': 'S', 'limit': '590', 'quantity': '17.289'},
'Depth3': {'actionIndicator': 'S', 'limit': '591', 'quantity': '17.689'}}},
}
df = DataFrame.from_dict(
{(k1, k2, k3): data[k1][k2][k3] for k1 in data.keys() for k2 in
data[k1].keys() for k3 in data[k1][k2].keys()}, orient="columns")
print(df)
你看着pd.melt? – Boud
Hacky but works:'df.unstack()。reorder_levels([0,3,2,1])。unstack(level = [3,2])' –
感謝Jan.任何希望重新排序的部分「深」? –