2015-05-21 14 views
6

मैं तीन स्तर dict का एक उदाहरण का उपयोग करते हुए एक 3 स्तर नेस्टेड शब्दकोशनेस्टेड MultiIndex के शब्दकोश DataFrame (3 स्तर)

Nested dictionary to multiindex dataframe where dictionary keys are column labels

+1

चेक इस बाहर: [का निर्माण-पांडा-dataframe-आइटम में नेस्टेड-शब्दकोश से] (http://stackoverflow.com/questions/13575090 StackOverflow पर/निर्माण-पांडा-डेटाफ्रेम-से-आइटम-इन-नेस्टेड-डिक्शनरी)। – Rhubarb

उत्तर

5

के लिए इस के बराबर करना चाहते हैं पांडा

In [1]: import pandas as pd 

In [2]: dictionary = {'A': {'a': {1: [2,3,4,5,6], 
    ...:       2: [2,3,4,5,6]}, 
    ...:      'b': {1: [2,3,4,5,6], 
    ...:       2: [2,3,4,5,6]}}, 
    ...:    'B': {'a': {1: [2,3,4,5,6], 
    ...:       2: [2,3,4,5,6]}, 
    ...:      'b': {1: [2,3,4,5,6], 
    ...:       2: [2,3,4,5,6]}}} 

और आपके द्वारा लिंक किए गए प्रश्न के आधार पर निम्न शब्दकोश समझ

In [3]: reform = {(level1_key, level2_key, level3_key): values 
    ...:   for level1_key, level2_dict in dictionary.items() 
    ...:   for level2_key, level3_dict in level2_dict.items() 
    ...:   for level3_key, values  in level3_dict.items()} 

कौन सा

In [4]: reform 
Out[4]: 
{('A', 'a', 1): [2, 3, 4, 5, 6], 
('A', 'a', 2): [2, 3, 4, 5, 6], 
('A', 'b', 1): [2, 3, 4, 5, 6], 
('A', 'b', 2): [2, 3, 4, 5, 6], 
('B', 'a', 1): [2, 3, 4, 5, 6], 
('B', 'a', 2): [2, 3, 4, 5, 6], 
('B', 'b', 1): [2, 3, 4, 5, 6], 
('B', 'b', 2): [2, 3, 4, 5, 6]} 

देता पांडा DataFrame

In [5]: pd.DataFrame(reform) 
Out[5]: 
    A   B 
    a  b  a  b 
    1 2 1 2 1 2 1 2 
0 2 2 2 2 2 2 2 2 
1 3 3 3 3 3 3 3 3 
2 4 4 4 4 4 4 4 4 
3 5 5 5 5 5 5 5 5 
4 6 6 6 6 6 6 6 6 

In [6]: df = pd.DataFrame(reform).T 
Out[6]: 
     0 1 2 3 4 
A a 1 2 3 4 5 6 
    2 2 3 4 5 6 
    b 1 2 3 4 5 6 
    2 2 3 4 5 6 
B a 1 2 3 4 5 6 
    2 2 3 4 5 6 
    b 1 2 3 4 5 6 
    2 2 3 4 5 6 

आप देख सकते हैं के लिए, आप आसानी से समझ और टपल के लिए नए प्रमुख के लिए एक और पंक्ति जोड़कर स्तरों की संख्या बढ़ा सकता है।

बोनस: अनुक्रमित करने के लिए नाम जोड़ने

In [7]: names=['level1', 'level2', 'level3'] 

In [8]: df.index.set_names(names, inplace=True) 

In [9]: df 
Out[9]: 
         0 1 2 3 4 
level1 level2 level3 
A  a  1  2 3 4 5 6 
       2  2 3 4 5 6 
     b  1  2 3 4 5 6 
       2  2 3 4 5 6 
B  a  1  2 3 4 5 6 
       2  2 3 4 5 6 
     b  1  2 3 4 5 6 
       2  2 3 4 5 6 
संबंधित मुद्दे