首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用np.where和np.select的条件语句

使用np.where和np.select的条件语句
EN

Stack Overflow用户
提问于 2021-04-07 03:07:45
回答 1查看 141关注 0票数 0

尝试根据某些字符串是否出现在不同的列中来填充数据帧中的列。我可以使用一系列嵌套的np.where语句来实现这一点,例如:

代码语言:javascript
复制
cond1=df.CollectType.str.contains('Outcrop')
cond2=df.CollectType.str.contains('Chip channel')
cond3=df.CollectType.str.contains('Rubble')
cond4=df.CollectType.str.contains('Float')
cond5=df.CollectType.str.contains('Dump')

df['R_SampleType'] = np.where(cond1, 'Outcrop', np.where(cond2, 
  'Chip channel', np.where(cond3,'Rubble', 
                           np.where(cond4,'Float', 
                                    np.where(cond5,'Dump','')))))

但这似乎并不是很有效。因此,我尝试列出条件,并使用以下命令调用该列表:

代码语言:javascript
复制
 values = ['Outcrop', 'Chip Channel','Rubble','Float','Dump']
 conditions = list(map(df['CollectType'].str.contains, values))

 df['R_SampleType'] = np.select(conditions, values, '')

但是我得到了一个错误:

代码语言:javascript
复制
ValueError: invalid entry 0 in condlist: should be boolean ndarray

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 03:37:32

看起来您只是想复制一列,并在不满足条件的地方放置一个空字符串。

如果是这样的话,这里有一个解决方案:

代码语言:javascript
复制
df["R_SampleType"] = df.CollectType.where(df.CollectType.isin(values_ok), other="")

可重现的例子:

代码语言:javascript
复制
from random import choices

values_ok = ["Outcrop", "Chip channel", "Rubble", "Float", "Dump"]
values_nok = ["Not", "A", "Valid", "Value"]
num_items = 15

df = pd.DataFrame(
    choices(values_ok + values_nok, k=num_items), columns=["CollectType"]
)

df["R_SampleType"] = df.CollectType.where(df.CollectType.isin(values_ok), other="")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66974996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档