2017-02-15 10 views
1

Ich muss einige neue Spalten basierend auf dem Wert eines dataframe abgelegt erstellen und ein Lookup dataframe mit einigen Raten.Spalte aus mehreren Datenrahmen erstellen

Mit df1 als

zone hh  hhind 
0 14  112.0 3.4 
1 15  5.0  4.4 
2 16  0.0  1.0 

und ein look_up df als

ind  per1 per2 per3 per4 
0 1.0  1.000 0.000 0.000 0.000 
24 3.4  0.145 0.233 0.165 0.457 
34 4.4  0.060 0.114 0.075 0.751 

wie kann ich df1.hh1 aktualisieren, indem Sie die look_up.per1 auf df1.hhind basierend Multiplikation und lookup.ind

zone hh  hhind hh1 
0 14  112.0 3.4 16.240 
1 15  5.0  4.4 0.300 
2 16  0.0  1.0 0.000 

im Moment bekomme ich das Ergebnis durch Zusammenführen der Tabellen und der Arithmetik.

r = pd.merge(df1, look_up, left_on="hhind", right_on="ind") 
r["hh1"] = r.hh *r.per1 

Ich würde gerne wissen, ob es einen direkteren Weg gibt, dies zu erreichen, indem man die Tabellen nicht zusammenführt?

Antwort

1

könnten Sie zunächst hhind und ind als die Indexachse df1 und look_up Datenrahmen sind. Dann multiplizieren entsprechende Elemente in hh und per1 Element-weise.

Karte diese Ergebnisse auf die Spalte hhind und ordnen diese einer neuen Spalte später wie folgt:

mapper = df1.set_index('hhind')['hh'].mul(look_up.set_index('ind')['per1']) 
df1.assign(hh1=df1['hhind'].map(mapper)) 

enter image description here

1

eine andere Lösung:

df1['hh1'] = (df1['hhind'].map(lambda x: look_up[look_up["ind"]==x]["per1"])) * df1['hh'] 
Verwandte Themen