熊猫:使用规则将数据框中2列的字符串值组合到新列中

时间:2019-04-29 02:38:31

标签: python pandas dataframe replace

我有一个Pandas df,我尝试使用规则将2个不同列的字符串值组合到df中的单个新列中。我遇到了问题,因为我无法获取代码以根据我要使用的业务逻辑/规则在列中选择适当的值。

以下是df的示例:


ID      Date        Original    New
ID1000  1/1/2019    High    
ID2000  4/10/2019               Moderate
ID3000  4/15/2019   High        Critical
ID4000  1/30/2019   Low         Moderate


#code to replicate example df

import pandas as pd

lst= [['ID1000','1/1/2019','High',''],
      ['ID2000','4/10/2019','','Moderate'],
      ['ID3000','4/15/2019','High','Critical'],
      ['ID4000','1/30/2019','Low','Moderate'],
     ]

df= pd.DataFrame(lst,columns=['ID','Date','Original','New'], dtype = float)
df


在此df中,我需要创建一个[Combined]列,该列遵循以下规则:

  1. 如果[日期]为<4/4/2019,请使用[原始]列行中的值
  2. 如果[日期]> = 4/4/2019,请使用[新建]列行中的值
  3. 如果[日期]是<4/4/2019并且有[新]列行值,请使用[新]列行中的值。

生成的df应该如下所示:


ID      Date        Original  New        Combined
ID1000  1/1/2019    High                 High
ID2000  4/10/2019             Moderate   Moderate
ID3000  4/15/2019   High      Critical   Critical
ID4000  1/30/2019   Low       Moderate   Moderate

我尝试应用类似于Excel嵌套IF的上述规则,但是没有任何运气。这是我使用的代码。


['Date']=pd.to_datetime(result['Date'])

[Combined]= if {['Date']<4/4/2019,[Original],
                if{['Date']>=4/4/2019,[New],
                if{['Date']<4/4/2019 & ['New']>0,[New]}}}

我期望创建一个新列[组合],并且该列中的值将为:“高”,“中等”,“严重”,“中等”。

当我应用上面的逻辑时,我在下面收到此“无效语法”错误:

File "<ipython-input-13-33cb4e8d5ca7>", line 3
    [Combined]= if {['Date']<4/4/2019,[Original],
                 ^
SyntaxError: invalid syntax

我已经看了过去几天的文档,但是我不知道如何将2列中的值与规则组合到一个新列中。此外,我还没有遇到过类似的用例。

有人可以帮我吗?也许有更好的方法。提前致谢。

2 个答案:

答案 0 :(得分:0)

我正在使用np.select中的numpy

import numpy as np 
con1=df.Date<'2019-04-04'
con2=df.Date>='2019-04-04'
con3=con1&df.New.ne('')
df['Combine']=np.select([con1,con2,con3],[df.Original,df.New,df.New])
df
Out[84]: 
       ID       Date Original       New   Combine
0  ID1000 2019-01-01     High                High
1  ID2000 2019-04-10           Moderate  Moderate
2  ID3000 2019-04-15     High  Critical  Critical
3  ID4000 2019-01-30      Low  Moderate       Low

答案 1 :(得分:0)

您可以组合条件2&3,然后使用gatsby-browser

np.where()