如何检查多列值对是否存在于另一DataFrame并实现去重?
多列匹配移除DataFrame重复条目解决方案
原来的单列判断代码df1=df1[~df1.user_id.isin(df2.user_id)]无法直接支持多列判断,需要调整代码才能实现基于User_id和User_name两列同时匹配的去重需求,以下是两种可行的实现方式:
方法一:利用merge的indicator参数(推荐,性能更优)
通过左连接两个DataFrame,借助indicator标记每条数据的来源,筛选出仅存在于df1的条目:
# 以User_id和User_name为键左连接,添加_merge列标记来源 merged_df = df1.merge(df2, on=['User_id', 'User_name'], how='left', indicator=True) # 筛选仅在df1中存在的行,移除_merge列 df1 = merged_df[merged_df['_merge'] == 'left_only'].drop('_merge', axis=1)
方法二:将多列转为元组后用isin判断
把两列组合成元组,再用isin进行集合判断,代码更简洁但大数据量下性能稍逊:
# 将df1和df2的目标列转为元组列表,判断是否存在交集并过滤 df1 = df1[~df1[['User_id', 'User_name']].apply(tuple, axis=1).isin(df2[['User_id', 'User_name']].apply(tuple, axis=1))]
内容的提问来源于stack exchange,提问作者m_lovric513
相关产品推荐
相关产品推荐

