Utwórz nową kolumnę w ramce danych pythona 3 (pandy) na podstawie wartości w innej kolumnie

Aug 16 2020

Mam ramkę danych pandy, w której muszę utworzyć nowe kolumny na podstawie wartości z innych kolumn w ramce danych. Oto ramka danych

osoba miasto stan kraj

Chicago w stanie Illinois w USA

B Phoenix, Arizona, USA

C San Diego, Kalifornia, USA

Chcę utworzyć dwie nowe kolumny na podstawie wartości w stanie

  1. Utwórz nową kolumnę df ["city-north"] = df ['city'], gdzie stan = "Illinois"
  2. Utwórz nową kolumnę df ["city-south"] = df ['city'], gdzie stan nie jest równy „Illinois”

próbowałem

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

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

Ale drugi wiersz kodu, w którym nie jest równy warunkowi, nie tworzy kolumny „miasto-południe”. Proszę pomóż

Odpowiedzi

1 jezrael Aug 16 2020 at 13:10

U mnie działa dobrze, jeśli nie utworzono warunków dopasowania, brakujące wartości:

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

W razie potrzeby puste ciągi wartości dla niedopasowanych wierszy:

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