Pandas/Python:如何基于其他列值按条件创建新列BB
实现pandas按条件生成新列BB的方法
你可以通过两种常见方式实现需求,两种方式均能完全匹配你的预期输出:
方式1:向量运算(优先推荐,数据量大时效率更高)
利用numpy数组的索引特性直接批量取值,避免逐行遍历:
import numpy as np # 提取待匹配的1/2/3列转为numpy数组 val_arr = df[["1", "2", "3"]].values # TGR1值对应列的索引(1对应0,2对应1,3对应2) col_index = df["TGR1"] - 1 # 按条件生成BB列 df["BB"] = np.where(df["TGR1"] == 0, 0, val_arr[df.index, col_index])
方式2:apply逐行处理(写法直观,适合小数据量场景)
通过行级apply直接按行规则计算:
df["BB"] = df.apply( lambda row: 0 if row["TGR1"] == 0 else row[str(row["TGR1"])], axis=1 )
你之前尝试的代码问题在于df.columns == test.TGR1.value是整列比较逻辑,无法实现每行根据TGR1的值取对应列的效果,上述两种方案均可解决该问题。
内容的提问来源于stack exchange,提问作者chuky pedro
相关产品推荐
相关产品推荐

