【问题标题】:How to populate values inside a new column based values from other columns in a dataframe in Pandas如何根据 Pandas 数据框中其他列的值填充新列中的值
【发布时间】:2020-03-16 20:15:12
【问题描述】:

我有数据框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,则使用 With Risk Name + LOCATION 填充新列 comment

*如果 Total Risk 为 0,则填充无风险识别

预期输出

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

如何做到这一点?

【问题讨论】:

  • 您自己尝试/搜索过什么?似乎是一个简单的条件查找...
  • @sweetmusicality,我自己搜索并尝试过,但无法确定

标签: python pandas dataframe if-statement


【解决方案1】:

我使用dotnp.where

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')

【讨论】:

  • @得到一个错误can't multiply sequence by non-int of type 'float'
  • @Rahulrajan 试试s2=df.filter(like='_RISK').ne(0)
  • @WeNYoBen,我有大约 2000 条记录,执行起来需要很多时间。它仍在运行。有没有其他方法
  • @Rahulrajan 我不确定,为什么,在你的数据中有虚拟变量,点是转换虚拟变量
  • @WeNYoBen,它还在运行。有没有其他方法可以使用像使用普通 if -else 来达到结果
猜你喜欢
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 2020-10-27
  • 2020-11-14
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多