2014-05-08 6 views
8

को dataframes Serializing मैं निम्न कॉलम और कोई डुप्लिकेट के साथ एक DataFrame है:पांडा से डी 3। JSON

['region', 'type', 'name', 'value'] 

कि इस प्रकार

grouped = df.groupby(['region','type', 'name']) 

मैं एक के रूप में इस पदानुक्रम को क्रमानुसार चाहते हैं एक पदानुक्रम के रूप में देखा जा सकता JSON ऑब्जेक्ट।

यदि कोई दिलचस्पी लेता है, तो इसके पीछे प्रेरणा अंततः this one जैसे विज़ुअलाइजेशन को एक साथ रखती है जिसके लिए JSON फ़ाइल की आवश्यकता होती है।

new_data['children'][i]['name'] = region 
new_data['children'][i]['children'][j]['name'] = type 
new_data['children'][i]['children'][j]'children'][k]['name'] = name 
new_data['children'][i]['children'][j]'children'][k]['size'] = value 
... 

जहां region, type, name पदानुक्रम के विभिन्न स्तरों के अनुरूप

(i, j और k द्वारा अनुक्रमित):

ऐसा करने के लिए, मैं निम्नलिखित में grouped बदलने की आवश्यकता क्या ऐसा करने के लिए पांडस/पायथन में कोई आसान तरीका है?

उत्तर

3

इन पंक्तियों के साथ कुछ आपको वहां ले जा सकता है।

from collections import defaultdict 

tree = lambda: defaultdict(tree) # a recursive defaultdict 
d = tree() 
for _, (region, type, name, value) in df.iterrows(): 
    d['children'][region]['name'] = region 
    ... 

json.dumps(d) 

एक vectorized समाधान कुछ है कि GroupBy की गति का लाभ लेता है बेहतर होगा, और शायद, लेकिन मैं इस तरह के एक समाधान के बारे में सोच नहीं कर सकते।

df.groupby(...).groups पर भी एक नज़र डालें, जो एक निर्देश देता है।

this answer भी देखें।