我正在尝试创建一个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
)