如何在Python的np.where中添加多条件判断
解决方案
方法1:用np.select一次性处理多条件优先级
多次用np.where赋值会覆盖整列,所以可以用np.select把所有条件按优先级整合,一次生成结果。这里要注意Column C的X/Y条件优先级高于Column D的条件(因为需要覆盖原有Up的结果):
import numpy as np import pandas as pd # 定义条件列表(按优先级从高到低) conditions = [ df['Column C'] == 'X', df['Column C'] == 'Y', df['Column D'] <= 99 ] # 对应条件的赋值内容 values = [ 'Down', 'Left', 'Up' ] # 生成Comment列,不符合所有条件时赋值为空 df['Comment'] = np.select(conditions, values, default='')
方法2:用df.loc精准修改指定行
如果想保留原有逻辑,再针对性修改符合X/Y条件的行,用loc定位目标行即可,只会更新指定行,不会覆盖其他内容:
# 先执行原有逻辑生成基础Comment值 df['Comment'] = np.where(df['Column D'] <= 99, 'Up', '') # 修改Column C为X的行 df.loc[df['Column C'] == 'X', 'Comment'] = 'Down' # 修改Column C为Y的行 df.loc[df['Column C'] == 'Y', 'Comment'] = 'Left'
两种方法最终都会得到你想要的目标DataFrame:
| Column A | Column B | Column C | Column D | Comment |
|---|---|---|---|---|
| A | 200 | 10 | Up | |
| B | 200 | X | 20 | Down |
| C | 200 | 100 | ||
| D | 200 | X | 60 | Down |
| E | 200 | Y | 30 | Left |
| F | 200 | 10 | Up |
内容的提问来源于stack exchange,提问作者user19828448
相关产品推荐
相关产品推荐

