匹配DataFrame列后无法写入YES至Key列的技术求助
问题原因及解决方法
为什么你的代码写不进"YES"
你用iterrows()遍历的时候,拿到的row是原DataFrame行的副本,修改这个副本里的Key值根本不会影响到原df_existing,所以最后Key列还是空的。而且这种双重循环的写法效率极低,数据量大的时候会慢到离谱,完全没必要这么做。
最优解决方案(一行代码搞定)
直接用Pandas的isin()方法,判断Code列的值是否在你的dlist里,然后直接赋值给Key列:
# 先处理得到dlist(这部分你的代码没问题) dep_list = df_epl[['Values']].copy() dep_list = dep_list.dropna() dep_list = dep_list.drop_duplicates() dlist = dep_list['Values'].tolist() # 直接用isin生成布尔值,转成"YES"/空字符串 df_existing['Key'] = df_existing['Code'].isin(dlist).map({True: 'YES', False: ''})
如果一定要用循环(不推荐)
要是你非要保留循环逻辑,那得用loc来定位行修改原DataFrame,而不是修改副本:
df_existing['Key'] = "" for l in dlist: # 直接定位Code等于l的行,设置Key为YES df_existing.loc[df_existing['Code'] == l, 'Key'] = "YES"
这种写法比你原来的双重循环效率高很多,因为它是利用Pandas的矢量化操作定位,而不是逐行遍历。
内容的提问来源于stack exchange,提问作者Berny
相关产品推荐
相关产品推荐

