Tạo cột mới trong khung dữ liệu python 3 (gấu trúc) dựa trên giá trị trong cột khác

Aug 16 2020

Tôi có khung dữ liệu gấu trúc nơi tôi cần tạo các cột mới dựa trên các giá trị từ các cột khác trong khung dữ liệu. Đây là khung dữ liệu

người thành phố quốc gia

A Chicago Illinois Hoa Kỳ

B Phoenix Arizona Hoa Kỳ

C San Diego California Hoa Kỳ

Tôi muốn tạo hai cột mới dựa trên các giá trị ở trạng thái

  1. Tạo cột mới df ["city-north"] = df ['city'] where state = "Illinois"
  2. Tạo cột mới df ["city-south"] = df ['city'] trong đó tiểu bang không bằng "Illinois"

Tôi đã cố gắng

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

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

Nhưng dòng mã thứ hai không bằng điều kiện sẽ không tạo cột 'thành phố-phía nam'. Hãy giúp tôi

Trả lời

1 jezrael Aug 16 2020 at 13:10

Đối với tôi hoạt động tốt, nếu không có điều kiện khớp nào được tạo ra thì các giá trị bị thiếu:

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

Nếu cần các chuỗi giá trị trống cho các hàng không khớp:

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