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

2024-10-01 13:45:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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','')))))

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

 values = ['Outcrop', 'Chip Channel','Rubble','Float','Dump']
 conditions = list(map(df['CollectType'].str.contains, values))

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

但我得到了一个错误:

ValueError: invalid entry 0 in condlist: should be boolean ndarray

有什么建议吗


Tags: dfnpchannelfloatwheredumpvalueschip
1条回答
网友
1楼 · 发布于 2024-10-01 13:45:05

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

如果是这种情况,这里有一个解决方案:

df["R_SampleType"] = df.CollectType.where(df.CollectType.isin(values_ok), other="")

可复制示例:

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="")

相关问题 更多 >