Pandas多列匹配:基于两个DataFrame生成含存在性判断的新DataFrame
解决方法:基于两个DataFrame生成存在性标记的新DataFrame
我来帮你搞定这个需求!首先我们先把你给出的DataFrame数据用代码还原出来,然后一步步实现生成df3的逻辑。
首先,先创建示例DataFrame:
import pandas as pd # 构建df1 df1 = pd.DataFrame({'a': ['T11552', 'T11559', 'T11566', 'T11567', 'T11569', 'T11594', 'T11604', 'T11625']}) # 构建df2 df2_data = [ ['T11552', 'T11555'], ['T11560', 'T11559'], ['T11566', 'T11562'], ['T11568', 'T11565'], ['T11569', 'T11560'], ['T11590', 'T11594'], ['T11604', 'T11610'], ['T11621', 'T11625'], ['T11633', 'T11631'], ['T11635', 'T11634'], ['T13149', 'T13140'] ] df2 = pd.DataFrame(df2_data, columns=['a', 'b'])
接下来是核心逻辑:我们需要检查df1的每个a列值是否出现在df2的a列或者b列中。先把df2的两列合并成一个唯一值集合(这样查找效率更高),再用isin()方法生成标记列:
# 把df2的a和b列合并成一个唯一值集合 df2_values = set(df2['a'].tolist() + df2['b'].tolist()) # 生成df3:复制df1的a列,添加v列标记存在性 df3 = df1.copy() df3['v'] = df3['a'].isin(df2_values)
运行后你就能得到符合要求的df3,比如:
- T11552对应
True(存在于df2的a列) - T11559对应
True(存在于df2的b列) - T11567对应
False(df2中无此值)
如果要确认结果,直接打印df3即可:
print(df3)
输出结果如下:
a v 0 T11552 True 1 T11559 True 2 T11566 True 3 T11567 False 4 T11569 True 5 T11594 True 6 T11604 True 7 T11625 True
这个方法简洁高效,用集合存储待查找值还能在数据量大的时候提升查询速度哦。
内容的提问来源于stack exchange,提问作者amrutha
相关产品推荐
相关产品推荐

