![](/img/trans.png)
[英]How to create a new column based on values from other columns in a Pandas DataFrame
[英]How to populate values inside a new column based values from other columns in a dataframe in Pandas
我有 dataframe df
如下所示。
df
DATA ELEMENT PORT LOCATION P_RISK S_RISK W_RISK Total_Risk
Event 1000 SGSIN 0 0 0 0
Event 2000 MYKUL 0 1 0 1
Event 3000 PARIS 0 0 1 1
Event 4000 LYON 1 0 0 1
Event 1000 USNYK 0 0 0 0
Event 2000 INCOK 0 0 1 1
Event 3000 MUMBAI 0 0 0 0
Event 4000 LAHORE 1 0 0 1
Event 2000 INCOK 0 0 0 0
Event 3000 PARIS 0 0 0 0
健康)状况
*如果Data Element
为 1000 或 2000 且Total Risk
为 1,则使用“风险名称 + PORT”填充新列comment
*如果Data Element
为 3000 或 4000 且Total Risk
为 1,则使用Risk Name + LOCATION
填充新列comment
*如果Total Risk
为 0,则填充无风险识别
预计 Output
df
DATA ELEMENT PORT LOCATION P_RISK S_RISK W_RISK Total_Risk Comment
Event 1000 SGSIN 0 0 0 0 No Risk Indentified
Event 2000 MYKUL 0 1 0 1 S_RISK predicted at MYKUL
Event 3000 PARIS 0 0 1 1 W_RISK predicted at PARIS
Event 4000 LYON 1 0 0 1 P_RISK predicted at LYON
Event 1000 USNYK 0 0 0 0 No Risk Indentified
Event 2000 INCOK 0 0 1 1 W_RISK predicted at INCOK
Event 3000 MUMBAI 0 0 0 0 No Risk Indentified
Event 4000 LAHORE 1 0 0 1 P_RISK predicted at LAHORE
Event 2000 INCOK 0 0 0 0 No Risk Indentified
Event 3000 PARIS 0 0 0 0 No Risk Indentified
如何才能做到这一点?
我在np.where
使用dot
s2=df.filter(like='_RISK')
s2=s2.dot(s2.columns)
df['new']=np.where(s2=='' ,'No Risk Indentified',s2 + ' predict at ' +df.PORT.mask(df.PORT=='',df.LOCATION))
df
Out[35]:
DATA ELEMENT PORT ... W_RISK Total_Risk new
0 Event 1000 SGSIN ... 0 0 No Risk Indentified
1 Event 2000 MYKUL ... 0 1 S_RISKpredict atMYKUL
2 Event 3000 ... 1 1 W_RISKpredict atPARIS
3 Event 4000 ... 0 1 P_RISKpredict atLYON
4 Event 1000 USNYK ... 0 0 No Risk Indentified
5 Event 2000 INCOK ... 1 1 W_RISKpredict atINCOK
6 Event 3000 ... 0 0 No Risk Indentified
7 Event 4000 ... 0 1 P_RISKpredict atLAHORE
8 Event 2000 INCOK ... 0 0 No Risk Indentified
9 Event 3000 ... 0 0 No Risk Indentified
[10 rows x 9 columns]
方法二
s2=df.filter(like='_RISK').ne(0).stack()
s2=s2[s2].reset_index(level=1)
df['new']=(s2['level_1'] + ' predict at ' +df.PORT.mask(df.PORT=='',df.LOCATION)).fillna('No Risk Indentified')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.