如何基于多列条件创建新列并引用Count列的值?
解决Pandas按条件生成新列的问题
方法1:使用np.select(适配你的原有思路)
你只需要把np.select的values参数里的固定值替换成Count列即可,默认值设为0。
示例代码
import pandas as pd import numpy as np # 构造测试数据 df = pd.DataFrame({ 'Type': ['A', 'B', 'C', 'A', 'B'], 'Set': ['Z', 'Z', 'Z', 'X', 'Y'], 'Count': [10, 20, 30, 40, 50] }) # 定义条件列表 conditions = [ (df['Type'] == 'A') & (df['Set'] == 'Z'), (df['Type'] == 'B') & (df['Set'] == 'Z') ] # 对应条件的取值,直接引用Count列 values = [df['Count'], df['Count']] # 生成New列,不满足条件时取0 df['New'] = np.select(conditions, values, default=0)
输出结果
| Type | Set | Count | New |
|---|---|---|---|
| A | Z | 10 | 10 |
| B | Z | 20 | 20 |
| C | Z | 30 | 0 |
| A | X | 40 | 0 |
| B | Y | 50 | 0 |
方法2:布尔索引(更简洁的写法)
也可以直接用布尔条件筛选,赋值Count列,其余位置填充0:
df['New'] = 0 # 先默认设为0 # 满足条件的行赋值为Count的值 mask = (df['Type'].isin(['A', 'B'])) & (df['Set'] == 'Z') df.loc[mask, 'New'] = df.loc[mask, 'Count']
这个方法逻辑更直观,代码量也更少,效果和上面完全一致。
内容的提问来源于stack exchange,提问作者AM12
相关产品推荐
相关产品推荐

