使用 np.where 创建具有三个条件的新列

rah*_*dbz 1 python numpy dataframe pandas

如何在 np.where() 中获得三个条件。通常它只使用两个条件我怎样才能得到三个。就像我需要创建一个新列 Better_Event ,根据夏季赛事和冬季赛事中赢得的奖牌总数之间的比较(即 Total_Summer 和 Total_Winter 列之间的比较)使用“np 来存储“夏季”、“冬季”或“两者” .where()”函数。

data['Better_Events'] = np.where(data['Total_Summer']>data['Total_Winter'],'Summer','Winter')
Run Code Online (Sandbox Code Playgroud)

上面的代码只有两个输出。我该如何将其更改为三个,其中 if data['Total_Summer']==data['Total_Winter'] 给出“两者”

ans*_*sev 5

你需要np.select

这是一个例子:

df=pd.DataFrame({'Total_Summer':[1,2,3,3,6,7],'Total_Winter':[2,2,3,4,5,4]})
print(df)
Run Code Online (Sandbox Code Playgroud)
   Total_Summer  Total_Winter
0             1             2
1             2             2
2             3             3
3             3             4
4             6             5
5             7             4
Run Code Online (Sandbox Code Playgroud)

现在设置每个条件的条件和值:

cond=[df['Total_Summer']>df['Total_Winter'],df['Total_Summer']<df['Total_Winter'],df['Total_Summer'].eq(df['Total_Winter'])]
values=['Summer','Winter','Both']
df['Better_Events']=np.select(cond,values)
print(df)
Run Code Online (Sandbox Code Playgroud)
   Total_Summer  Total_Winter Better_Events
0             1             2        Winter
1             2             2          Both
2             3             3          Both
3             3             4        Winter
4             6             5        Summer
5             7             4        Summer
Run Code Online (Sandbox Code Playgroud)