2017-03-23 4 views
0

Ich versuche, einen Pandas Datenrahmen aus den Ergebnissen einer MultiLCA-Berechnung zu erstellen, wobei als Spalten die Methoden und als Zeilen die Funktionseinheiten verwendet werden. Ich habe eine Art von Lösung finden, aber es ist ein bisschen umständlich (Ich bin nicht sehr gut mit Wörterbuch)Erstellen Sie einen Datenrahmen aus MultiLCA Ergebnissen in Brightway2

... 
mlca=MultiLCA("my_calculation_setup") 
pd.DataFrame(mlca.results,columns=mlca.methods) 

fu_names=[] 

for d in mlca.func_units: 
    for key in d: 
     fu_names.append(str(key)) 

dfresults['fu']=fu_names 
dfresults.set_index('fu',inplace=True) 

ist es eine elegantere Art und Weise, dies zu tun? Die Namen sind auch sehr lang, aber das ist eine andere Geschichte ...

Antwort

0

Ihr Code scheint mir relativ elegant. Wenn Sie mit str(key) halten wollen, dann könnte man es etwas mit einer Liste Verständnis vereinfachen:

mlca=MultiLCA("my_calculation_setup") 
dfresults = pd.DataFrame(mlca.results, columns=mlca.methods) 

dfresults['fu'] = [str(key) for demand in mlca.func_units for key in demand] 
dfresults.set_index('fu', inplace=True) 

Beachten Sie, dass dies nur funktioniert, wenn Nachfrage Wörterbücher jeder eine Aktivität haben. Sie könnten Situationen haben, in denen ein Bedarfswörterbuch zwei Aktivitäten haben würde (wie LCA({'foo': 1, 'bar': 2})), wo dies fehlschlagen würde, weil es zu viele Elemente in der fu Liste gäbe.

Wissen Sie, dass Sie nur pro Bedarf eine Aktivität haben, dann können Sie einen etwas schöneren Datenrahmen machen wie folgt:

mlca=MultiLCA("my_calculation_setup") 
scores = pd.DataFrame(mlca.results, columns=mlca.methods) 

as_activities = [ 
    (get_activity(key), amount) 
    for dct in mlca.func_units 
    for key, amount in dct.items() 
] 
nicer_fu = pd.DataFrame(
    [ 
     (x['database'], x['code'], x['name'], x['location'], x['unit'], y) 
     for x, y in as_activities 
    ], 
    columns=('Database', 'Code', 'Name', 'Location', 'Unit', 'Amount') 
) 
nicer = pd.concat([nicer_fu, scores], axis=1) 

jedoch im allgemeinen Fall von Datenrahmen nicht den perfekte Ergänzung für die Berechnung Setups . Wenn ein Nachfragewörterbuch mehrere Aktivitäten hat, gibt es keine gute Möglichkeit, dies in eine Dimension oder eine Zeile zu "quetschen".

Verwandte Themen