基于Pandas实现DataFrame索引匹配生成mask列的需求与示例
解决方法:给DataFrame添加基于索引存在性的mask列
嘿,这个需求用Pandas的内置方法就能轻松实现,代码简洁还高效。我直接给你上可运行的方案,再拆解下逻辑:
完整实现代码
import pandas as pd # 初始化你提供的示例数据 data1 = {'key':['a','b','c','d','e','f','g'], 'profit':[12,3,4,5,6,7,9]} df1 = pd.DataFrame(data1) data2= {'key':['a','b','c'], 'profit':[12,3,4]} df2 = pd.DataFrame(data2) # 核心逻辑:生成mask列 df1['mask'] = df1.index.isin(df2.index).astype(int) # 输出结果,和你预期的df3完全一致 print(df1)
逻辑拆解
- 第一步:判断索引存在性:
df1.index.isin(df2.index)会返回一个布尔类型的Series,每个元素对应df1的索引是否存在于df2的索引中——存在就返回True,不存在返回False。 - 第二步:转成整数格式:
.astype(int)把布尔值转换成整数,True会变成1,False变成0,刚好符合你需要的mask列规则。
额外补充:如果是基于key列而非索引的情况
看你的示例数据,key列的内容和索引的匹配结果一致,如果你实际需求是判断key值是否存在于df2的key列中,只需要把代码改成:
df1['mask'] = df1['key'].isin(df2['key']).astype(int)
同样能得到你想要的结果。
内容的提问来源于stack exchange,提问作者Todd
相关产品推荐
相关产品推荐

