如何合并两个pandas dataframe并按条件生成二分类标识列
实现方法
有两种简单高效的实现方式,效果一致:
方法1:使用isin()直接判断(推荐,代码最简洁)
核心逻辑是先提取有影响力期刊的标题列表,直接对论文表的期刊名做匹配,布尔值转整数即可得到0/1的二分类标记。
import pandas as pd # ---------- 构造示例数据,有自己的数据集可跳过这部分 ---------- # 有影响力期刊表 influential_journals = pd.DataFrame({ 'journal_id': [1,2,3], 'journal_title': ['Journal 1', 'Journal 2', 'Journal 3'] }) # 论文列表表 articles = pd.DataFrame({ 'article_id': [1,2,3,4], 'journal_title': ['Journal 1', 'Journal 2', 'Journal 18', 'Journal 55'], 'article_title': ['Title 1', 'Title 2', 'Title 3', 'Title 4'] }) # ---------------------------------------------------------- # 核心代码仅1行 articles['influential'] = articles['journal_title'].isin(influential_journals['journal_title']).astype(int)
该方法不需要修改原表结构,执行效率高,适合数据量较大的场景。
方法2:使用merge左连接实现
核心逻辑是先给有影响力期刊表加一个全为1的标记列,再和论文表按期刊名字段左连接,缺失的标记值填充为0即可。
# 给影响力期刊表新增标记列 influential_journals['influential'] = 1 # 左连接合并,缺失的标记值填充为0 articles = articles.merge(influential_journals[['journal_title', 'influential']], on='journal_title', how='left').fillna(0) # 转换为整数类型 articles['influential'] = articles['influential'].astype(int)
注意:如果两个表的期刊名存在大小写、首尾空格不一致的情况,匹配前建议先做标准化处理,避免匹配失败:
# 统一转小写并去除首尾空白字符 influential_journals['journal_title'] = influential_journals['journal_title'].str.strip().str.lower() articles['journal_title'] = articles['journal_title'].str.strip().str.lower()
内容的提问来源于stack exchange,提问作者Anakin Skywalker
相关产品推荐
相关产品推荐

