如何在python中基于if语句标记行



我正在尝试创建一个Labels列来标记我的数据,我尝试过改编类似问题的答案,但遇到了我特别需要的问题。

我的数据是这样的(不幸的是,我不能提供一个真实的例子(:

Gene   CLN
Gene1  cardiovascular
Gene2  Cardiovascular
Gene3  Neurological

目前我正在尝试:

df['Labels'] = ['Probable' if df['CLN'].str.contains("cardio", case=False) else NA for x in df['CLN']]

条件是在CLN列中找到所有行,如果它们有与"cardious"匹配的部分字符串,则对它们进行标记,并忽略对任何不匹配的行进行标记/执行任何操作,但我的代码给出了一个错误(ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().(-我对python没有信心,所以我不确定该怎么做才能解决这个问题?

预期输出:

Gene   CLN             Labels
Gene1  cardiovascular  Probable
Gene2  Cardiovascular  Probable
Gene3  Neurological    NA

长期的想法是,当我想添加更多的标签而不仅仅是Probable时,我可以再写一行,所以做一些类似的事情:

df['Labels'] = ['Probable' if df['CLN'].str.contains("cardio", case=False) else NA for x in df['CLN']]
df['Labels'] = ['Unlikely' if df['CLN'].str.contains("neurological", case=False) else NA for x in df['CLN']]

但我担心这些会相互抵消,覆盖NA标签。

使用np.select:

df['Labels'] = np.select((df['CLN'].str.contains("cardio", case=False),
df['CLN'].str.contains("neurological", case=False)),
('Probable', 'Unlikely'),
np.nan              # or 'NA' if it fits you better
)                  

最新更新