2017-07-21 5 views
1

Ich habe einen Datenrahmen, der 4 Spalten und 4 Zeilen hat. Ich muss es in 2 Spalten und 4 Zeilen umformen. Die 2 neuen Spalten sind das Ergebnis der Addition der Werte von Spalte1 + Spalte3 und Spalte2 + Spalte4. Ich möchte kein anderes Speicherobjekt dafür erstellen.Dynamisch den Datenrahmen in Pandas umformen

ich

versuche
df['A','B'] = df['A']+df['C'],df['B']+df['D'] 

Kann es nur mit Drop-Funktion erreicht werden? Gibt es eine andere einfachere Methode dafür?

Antwort

1

die Probe Datenrahmen df

df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=list('ABCD')) 
df 

    A B C D 
0 0 1 2 3 
1 4 5 6 7 
2 8 9 10 11 
3 12 13 14 15 

eine Zeile Code

pd.DataFrame(
    df.values.reshape(4, 2, 2).transpose(0, 2, 1).sum(2), 
    columns=df.columns[:2] 
) 

    A B 
0 2 4 
1 10 12 
2 18 20 
3 26 28 

Eine andere Zeile Code Betrachten

df.iloc[:, :2] + df.iloc[:, 2:4].values 

    A B 
0 2 4 
1 10 12 
2 18 20 
3 26 28 

Noch eine andere

df.assign(A=df.A + df.C, B=df.B + df.D).drop(['C', 'D'], 1) 

    A B 
0 2 4 
1 10 12 
2 18 20 
3 26 28 
0

Dies funktioniert für mich:

df['A'], df['B'] = df['A'] + df['C'], df['B'] + df['D'] 
df.drop(['C','D'], axis=1) 
+0

Dank @jxstanford für Ihre Antwort. Kann es mit einer einzigen Codezeile gemacht werden? – Avij

+0

sicher, obwohl ich nicht überzeugt bin, dass es wichtig für die Leistung meines Beispiels ist, und würde Lesbarkeit IMO verletzen. FWIW, ich habe meine Antwort auf die Antwort von @ayhan gegeben, aufgrund der Flexibilität und der Idomatik. – jxstanford

3

Die dynamische Art und Weise zwei Spalten in einer Zeit der Addition ist groupby verwenden:

df.groupby(np.arange(len(df.columns)) % 2, axis=1).sum() 
Out[11]: 
    0 1 
0 2 4 
1 10 12 
2 18 20 
3 26 28 

können Sie anschließend verwenden umbenennen, wenn Sie Spaltennamen ändern wollen, aber das würde eine Logik erfordern.