Erstellen Sie eine neue Spalte im Datenrahmen von Python 3 (Pandas) basierend auf dem Wert in einer anderen Spalte

Aug 16 2020

Ich habe einen Pandas-Datenrahmen, in dem ich neue Spalten basierend auf Werten aus anderen Spalten im Datenrahmen erstellen muss. Hier ist der Datenrahmen

Person Stadt Staat Land

Ein Chicago Illinois USA

B Phoenix Arizona USA

C San Diego Kalifornien USA

Ich möchte zwei neue Spalten basierend auf den Werten im Zustand erstellen

  1. Neue Spalte erstellen df["city-north"] = df['city'] where state = "Illinois"
  2. Erstellen Sie eine neue Spalte df["city-south"] = df['city'] wobei state nicht gleich "Illinois" ist

Ich habe es versucht

df.loc[((df['state'] == 'Illinois')), 'city-north'] = df['city']

df.loc[((df['state'] != 'Illinois')), 'city-south'] = df['city']

Aber die zweite Codezeile, in der die Bedingung nicht gleich ist, erstellt keine Spalte „Stadt-Süd“. Bitte helfen Sie

Antworten

1 jezrael Aug 16 2020 at 13:10

Für mich funktioniert es gut, wenn keine Übereinstimmungsbedingungen erstellt werden, fehlende Werte:

df.loc[df['state'] == 'Illinois', 'city-north'] = df['city']
df.loc[df['state'] != 'Illinois', 'city-south'] = df['city']

print (df)
  person       city       state country city-north city-south
0      A    Chicago    Illinois     USA    Chicago        NaN
1      B    Phoenix     Arizona     USA        NaN    Phoenix
2      C  San Diego  California     USA        NaN  San Diego

Wenn leere Wertezeichenfolgen für nicht übereinstimmende Zeilen benötigt werden:

df['city-north'] = np.where(df['state'] == 'Illinois', df['city'], '')
df['city-south'] = np.where(df['state'] != 'Illinois', df['city'], '')

print (df)
  person       city       state country city-north city-south
0      A    Chicago    Illinois     USA    Chicago           
1      B    Phoenix     Arizona     USA               Phoenix
2      C  San Diego  California     USA             San Diego