如何仅用for循环在Pandas DataFrame中按条件创建新列并赋值
解决方案
原代码问题分析
- 匹配逻辑完全错误:你把
unique_list拼接成大字符串后,判断该字符串是否存在于ID_FINAL的值中,这和需求的「ID_FINAL值是否属于unique_list」方向完全相反。 - 列初始化与赋值不符合需求:空Series赋值易引发索引问题,且原代码最终给
MB列赋值的是ID_FINAL的原始值,不是需求的1。
修正后的代码
# 统一类型:确保unique_list元素类型和ID_FINAL列一致(比如都转成字符串) unique_list_str = [str(item) for item in unique_list] # 先给MB列设置默认值0 df_dep_4['MB'] = 0 # 遍历每一行的索引和ID_FINAL值 for idx, id_val in df_dep_4['ID_FINAL'].items(): # 判断当前ID值是否在目标列表中 if str(id_val) in unique_list_str: df_dep_4.loc[idx, 'MB'] = 1
补充说明
- 统一类型是为了避免因类型不匹配导致的匹配失败(比如
ID_FINAL是字符串类型,unique_list里是数字类型)。 - 先设默认值再遍历修改,比空列逐个赋值更高效,也更不容易出现索引错位问题。
内容的提问来源于stack exchange,提问作者S_Star
相关产品推荐
相关产品推荐

