如何基于ID和index对比两个Pandas DataFrame并生成pred列?
问题描述
现有两个Pandas DataFrame:
import pandas as pd df1 = pd.DataFrame({ 'ID': ['087', '087', '087'], 'index': [4, 5, 6] }) df2 = pd.DataFrame({ 'ID': ['087'] * 12, 'index': range(1, 13) })
需求:基于ID和index列对比两个DataFrame,生成结果DataFrame并新增pred列——当该行同时存在于df1中时,pred值为1,否则为0,最终结果示例如下:
# 示例结果 ID index pred 0 087 1 0 1 087 2 0 2 087 3 0 3 087 4 1 4 087 5 1 5 087 6 1 6 087 7 0 ... 11 087 12 0
简洁实现方案
方法一:左连接+填充空值
这是最直观高效的方式,利用Pandas的合并操作实现:
# 先给df1添加pred=1的列,再与df2左连接 result_df = df2.merge(df1.assign(pred=1), on=['ID', 'index'], how='left') # 将空值填充为0,完成标记 result_df['pred'] = result_df['pred'].fillna(0).astype(int)
方法二:元组集合匹配
通过将行数据转为元组,利用集合判断存在性:
# 提取df1中(ID, index)的元组集合 df1_key_set = set(df1[['ID', 'index']].itertuples(index=False, name=None)) # 对df2每行生成元组,判断是否在集合中,转为整数标记 result_df = df2.assign( pred=df2[['ID', 'index']].apply(tuple, axis=1).isin(df1_key_set).astype(int) )
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

