2017-12-30 8 views
0

Wenn ein Datenrahmen zwei Spalten:Ändern einer Spalte Pandas Datenrahmen basierend auf Bedingungen auf einer anderen Spalte

df=pd.DataFrame({'City':['New York', 'New jersey', 'California'], 'Population':[100000, 500000, 300000]}) 

Wenn Stadt ‚New York‘ oder ‚California‘ ist, möchte ich 1000 an die Bevölkerung Spalte hinzuzufügen. Ich habe versucht, Code, aber es ändert sich nicht das Original DF

df[(df['City']=='New York') | (df['City']=='California')]['Population']+1000 

Bitte beraten, wenn es mehrere Möglichkeiten, es zu tun.

Antwort

0
df.loc[(df['City']=='New York') | (df['City']=='California'), 'Population'] += 1000 

Die Lösung ist fast so einfach wie + mit += ersetzt:

df[(df['City']=='New York') | (df['City']=='California')]['Population'] += 1000 

Aber dieses eine SettingWithCopyWarning werfen. (Weiter auf dieser Warnung zu lesen ist here.)

+1

Es hat funktioniert. Vielen Dank – AjitKrish

+0

@AjitKrish du bist willkommen! Ich habe gerade in einer kleinen Erklärung + weiterlesen für warum die offensichtlichste Lösung der Änderung '+' zu '+ =' funktioniert nicht ganz funktioniert. –

0

Hier ist eine lesbare Lösung:

df.Population += df.City.isin(['New York', 'California']) * 1000 

Sie isin statt dem langen logischen Ausdruck verwenden kannst. Sie gibt einen booleschen Vektor zurück, der mit 1000 multipliziert und zur Populationsspalte hinzugefügt werden kann.

Vergessen Sie nicht, dass + eine neue Reihe (Spalte eines DataFrame) zurückgibt. Wenn Sie das vorhandene ändern möchten, müssen Sie es mit += zurück zuweisen.

Verwandte Themen