[英]Add a new column with condition if a string 'contains' substring?
我想添加一个具有以下条件的新列“检查”:
或者
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.