如何基于DataFrame中Arm列首次出现的指定值生成Response列
解决方案
直接利用Pandas的内置方法可以高效实现需求,无需嵌套循环:
key = [1, 2, 3, 4] # 生成Response列:Arm在key中且首次出现标记1,否则0 df['Response'] = ((df['Arm'].isin(key)) & (~df['Arm'].duplicated())).astype(int)
代码解释
df['Arm'].isin(key):判断每行Arm值是否在目标key列表中,返回布尔序列~df['Arm'].duplicated():duplicated()会将重复出现的行(除首次出现的行)标记为True,取反后仅首次出现的行标记为True- 用
&做逻辑与运算,仅同时满足「在key中」和「首次出现」的行结果为True,最后通过astype(int)将布尔值转为1/0
结果验证
运行后生成的Response列完全符合预期:
| Animal | Arm | Response |
|---|---|---|
| 1 | 2 | 1 |
| 1 | 4 | 1 |
| 1 | 3 | 1 |
| 1 | 3 | 0 |
| 1 | 1 | 1 |
| 1 | 1 | 0 |
原代码问题分析
你之前的代码仅判断了Arm是否在key中,没有处理重复出现的情况,因此所有在key中的行都会被标记为1,无法区分首次/重复出现。
内容的提问来源于stack exchange,提问作者Kshtj
相关产品推荐
相关产品推荐

