2016-12-14 2 views
0

betrachten unter pandas Datenrahmen, wie mehrere Spalten von Pandas Datenrahmen Inplace und in einzelne Instanz

df = pd.DataFrame(np.random.randint(1,10,15).reshape(-1,3), columns = list('abc')) 

ich möchte aktualisieren Werte aller drei Spalten als Verhältnisse an Ort und Stelle (dh Spalten Werte geteilt durch Summe aller aktualisieren drei Spalten, Achse = 1) in einer einzigen Instanz.

so etwas wie:

df = df.loc[:,['a','b','c']]/df.loc[:,['a','b','c']].sum(axis = 1) 

Wie kann ich das erreichen?

Antwort

3

können pandas.DataFrame.div Methode:

df.div(df.sum()) 

#   a   b   c 
#0 0.071429 0.368421 0.173913 
#1 0.214286 0.210526 0.391304 
#2 0.214286 0.052632 0.043478 
#3 0.285714 0.105263 0.130435 
#4 0.214286 0.263158 0.260870 

Um durch Reihen dividieren, geben Achse entsprechend:

df1 = df.div(df.sum(axis = 1), axis = 0) 

hier ein Test ist, dass das Ergebnis-Datenrahmen rowsum von eins hat.

df1.sum(axis = 1) 

#0 1.0 
#1 1.0 
#2 1.0 
#3 1.0 
#4 1.0 
#dtype: float64 
+0

Ich kann dies nicht tun, wenn die Achse auf 1 (horizontal) eingestellt ist. Dies funktioniert zwar, wenn die Achse auf 0 (vertikal) eingestellt ist. In diesem Fall muss ich das df transponieren. etwas wie: df.T.div (df.T.sum()) T –

+0

Überprüfen Sie das Update, Sie müssen die Achse entsprechend in den beiden Funktionen angeben. – Psidom

Verwandte Themen