pandas中根据键匹配两个DataFrame更新指定列值的方法
我有两个DataFrame:
需求:针对df1中的所有行,通过关联键匹配找到df2中对应的行,将df2匹配行的final列值更新为1。
实现方案
不需要做merge拼接,直接用集合判断+loc赋值的方式性能最高,也不会打乱df2原有的行顺序。
单字段作为关联键
假设你用来匹配两个DataFrame的关联键列名是user_id(替换成你实际的关联键列名即可),代码如下:
# 如果需要给未匹配行设置默认值0,可以先执行下面这行,不需要可跳过 # df2['final'] = 0 # 提取df1中所有需要匹配的关联键,去重减少后续判断量 match_key_set = set(df1['user_id'].unique()) # 给匹配到的行更新final值为1 df2.loc[df2['user_id'].isin(match_key_set), 'final'] = 1
多个字段联合作为关联键
如果需要同时匹配多个字段才能确定对应关系(比如同时匹配date、user_id两个字段),用元组组合多键值判断即可:
# 如果需要给未匹配行设置默认值0,可以先执行下面这行,不需要可跳过 # df2['final'] = 0 # 生成多键组合的匹配集合 match_key_set = set(df1[['date', 'user_id']].apply(tuple, axis=1)) # 匹配并更新值 df2.loc[df2[['date', 'user_id']].apply(tuple, axis=1).isin(match_key_set), 'final'] = 1
提示:如果你的df2数据量超过10万行,多键匹配场景可以先把关联键拼接成单字符串再做isin判断,性能比apply生成元组更高,比如先生成拼接键
df1['merge_key'] = df1['date'].astype(str) + '_' + df1['user_id'].astype(str),后续按单键匹配逻辑处理即可。
内容的提问来源于stack exchange,提问作者loksan
相关产品推荐
相关产品推荐

