2017-06-09 9 views
1

Dies ist der aktuelle Code verwende ich eine Spalte Wert für eine bestimmte Zeile zu einer anderen Spalte für die gleiche Zeile verschieben:Verschieben einer Spalte Wert auf eine andere Spalte - Pandas

#Move 2014/15 column ValB to column ValA 
df.loc[(df.Survey_year == 2014), 'ValA'] = df.loc[(df.Survey_year == 2014), 'ValB'] 

ich das gleiche .loc tun [ ] wieder außer 2015 auch. Das funktioniert, aber ich glaube nicht, dass dies der effizienteste Weg ist, wenn ich einen großen Datenrahmen mit vielen Werten dafür verwende.

Antwort

3

Seine ähnliche, aber viel einfachere Logik. np.where können Sie eine if-Anweisung ähnlich Excel definieren. Wenn (x = y, tue dies, tue dies, wenn falsch).

import numpy as np 

df['ValA'] = np.where((df.Survey_year == 2014) | (df.Survey_year == 2015), df['ValB'], df['ValA']) 
+0

Danke, aber ich bin erhalte eine Fehlermeldung: Valueerror: Der Wahrheitswert einer Serie ist nicht eindeutig. Verwenden Sie a.empty, a.bool(), a.item(), a.any() oder a.all(). Wie würde ich das beheben? EDIT: Ich habe gerade geändert oder zu | und es hat es behoben – Tom

+0

Tut mir leid, Sie haben Recht, 'oder' ist für Python, nicht zum Vergleichen einer Serie oder eines Datenrahmens. Ich werde bearbeiten –

4

reinigen Option

mask = df.Survey_year.isin([2014, 2015]) 
df.loc[mask, 'ValA'] = df.loc[mask, 'ValB'] 

Schnelle Option

mask = np.in1d(df.Survey_year.values, [2014, 2015]) 
bloc = df.index.get_loc('ValB') 
v = df.values 
df.loc[mask, 'ValA'] = v[mask, bloc] 
Verwandte Themen