繁体   English   中英

如何在新列中填充值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM