Crie uma nova coluna no dataframe python 3 (pandas) com base no valor em outra coluna

Aug 16 2020

Eu tenho um dataframe do pandas onde preciso criar novas colunas com base nos valores de outras colunas no dataframe. Aqui está o quadro de dados

pessoa cidade estado país

A Chicago Illinois EUA

B Phoenix Arizona EUA

C San Diego Califórnia EUA

Eu quero criar duas novas colunas com base nos valores no estado

  1. Crie uma nova coluna df["city-north"] = df['city'] onde estado = "Illinois"
  2. Crie uma nova coluna df["city-south"] = df['city'] onde o estado não é igual a "Illinois"

eu tentei

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

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

Mas a segunda linha de código, onde não é igual à condição, não cria a coluna 'city-south'. Por favor ajude

Respostas

1 jezrael Aug 16 2020 at 13:10

Para mim, trabalhando bem, se nenhuma condição de correspondência for criada, valores ausentes:

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

Se precisar de strings de valores vazios para linhas não correspondidas:

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