繁体   English   中英

如果字符串“包含”substring,则添加带有条件的新列?

[英]Add a new column with condition if a string 'contains' substring?

我想添加一个具有以下条件的新列“检查”:

  • “抑制总数”和“Sup-SDM”。

或者

  • Suppression partiel 和 Franc SUP - Geisi

Dataframe

类型 信息
Sup_EF - SUP - SDM 2021-12-08 16:47:51.0-抑制总数
Modif_EF - SUP - SDM 2021-12-08 16:47:51.0-创作
Sup_EF - SUP - 盖斯 2021-12-08 16:47:51.0-抑制总数
Modif_EF - 法郎 SUP - Geisi 2021-12-17 10:50:40.0-压制党

所需的 output

类型 信息 查看
Sup_EF - SUP - SDM 2021-12-08 16:47:51.0-抑制总数 正确的
Modif_EF - SUP - SDM 2021-12-08 16:47:51.0-创作 失败
Sup_EF - SUP - 盖斯 2021-12-08 16:47:51.0-抑制总数 失败
Modif_EF - 法郎 SUP - Geisi 2021-12-17 10:50:40.0-压制党 正确的

代码

if ('SUP - SDM' in df["Type"].values) and ('Suppression total' in df['Info'].values):
    df['Check'] = "Correct"
elif ('Franc SUP - Geisi' in df["Type"].values) and ('Suppression partiel' in df['Info'].values):
    df['Check'] = "Correct"
else:
    df['Check'] = "Fail"

但我的 output 看起来像这样:

类型 信息 查看
Sup_EF - SUP - SDM 2021-12-08 16:47:51.0-抑制总数 失败
Modif_EF - SUP - SDM 2021-12-08 16:47:51.0-创作 失败
Sup_EF - SUP - 盖斯 2021-12-08 16:47:51.0-抑制总数 失败
Modif_EF - 法郎 SUP - Geisi 2021-12-17 10:50:40.0-压制党 失败

或者当我使用此代码时,它显示 Keyerror: 'Info'

df['Check'] = df.apply(lambda x: 'Correct' if ('Suppression total' in x['Info'] and 'Sup-SDM' in x['Type']) or ('Suppression partiel' in x['Info'] and 'Franc SUP - Geisi' in x['Type']) else 'Fail')

您可能想要使用 numpy,因为它可以扩展为具有两个以上的条件,并且如果需要很容易得到结果:

df['check'] = np.where((df.Type.str.contains('SUP - SDM') & df.Info.str.contains('Suppression total')
                       | (df.Type.str.contains('Franc SUP - Geisi') & (df.Info.str.contains('Suppression partiel')))),'correct','fail')

您需要添加axis=1以应用于行并将Sup-SDM修复为SUP - SDM

df['Check'] = df.apply(lambda x: 'Correct' if ('Suppression total' in x['Info'] and 'SUP - SDM' in x['Type']) or ('Suppression partiel' in x['Info'] and 'Franc SUP - Geisi' in x['Type']) else 'Fail', axis=1)

更好的是np.where

m1 = ( df['Info'].str.contains('Suppression total')  & df['Type'].str.contains('SUP - SDM'))
df['Check'] = np.where(m1 | m2, 'Correct', 'Fail')

您可以按行将 function 应用于 dataframe 以检查字符串是否在列中。

df = pd.DataFrame({'Type': {0: 'Sup_EF - SUP - SDM',
  1: 'Modif_EF - SUP - SDM',
  2: 'Sup_EF - SUP - Geisi',
  3: 'Modif_EF - Franc SUP - Geisi'},
 'Info': {0: '2021-12-08 16:47:51.0-Suppression totale',
  1: '2021-12-08 16:47:51.0-Creation',
  2: '2021-12-08 16:47:51.0-Suppression totale',
  3: '2021-12-17 10:50:40.0-Suppression partiel'},
 'Check': {0: 'good', 1: 'not good', 2: 'not good', 3: 'good'}})

def f(s):
    if ("SUP - SDM" in s['Type'] and "Suppression total" in s['Info']) or ("Franc SUP - Geisi" in s['Type'] and "Suppression partiel" in s['Info']):
        return "Correct"
    else:
        return "Fail"
    
df['Check'] = df.apply(f, axis=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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