สร้างคอลัมน์ใหม่ในดาต้าเฟรม python 3 (แพนด้า) ตามค่าในคอลัมน์อื่น

Aug 16 2020

ฉันมีดาต้าเฟรมของแพนด้าที่ฉันต้องสร้างคอลัมน์ใหม่ตามค่าจากคอลัมน์อื่นในดาต้าเฟรม นี่คือ dataframe

คนในเมืองรัฐ

ชิคาโกอิลลินอยส์สหรัฐอเมริกา

บีฟีนิกซ์แอริโซนาสหรัฐอเมริกา

C San Diego California USA

ฉันต้องการสร้างคอลัมน์ใหม่สองคอลัมน์ตามค่าในสถานะ

  1. สร้างคอลัมน์ใหม่ df ["city-north"] = df ['city'] โดยที่ state = "Illinois"
  2. สร้างคอลัมน์ใหม่ df ["city-south"] = df ['city'] โดยที่รัฐไม่เท่ากับ "Illinois"

ฉันเหนื่อย

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

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

แต่บรรทัดที่สองของรหัสที่ไม่เท่ากับเงื่อนไขจะไม่มีการสร้างคอลัมน์ 'เมือง - ทิศใต้' กรุณาช่วย

คำตอบ

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