他の列の値に基づいて、Python 3(パンダ)データフレームに新しい列を作成します

Aug 16 2020

パンダのデータフレームがあり、データフレーム内の他の列の値に基づいて新しい列を作成する必要があります。これがデータフレームです

人都市国家国

米国イリノイ州シカゴ

BフェニックスアリゾナUSA

C米国カリフォルニア州サンディエゴ

状態の値に基づいて2つの新しい列を作成したい

  1. 新しい列を作成しますdf ["city-north"] = df ['city'] where state = "Illinois"
  2. 新しい列df ["city-south"] = df ['city']を作成します。ここで、stateは "Illinois"と等しくありません。

私は試した

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

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

ただし、条件と等しくないコードの2行目では、「city-south」列は作成されません。助けてください

回答

1 jezrael Aug 16 2020 at 13:10

うまく機能している私にとって、一致条件が作成されない場合、欠落している値:

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

一致しない行に空の値の文字列が必要な場合:

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