You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多条件合并两个不同行数的Pandas数据集?

Pandas多条件合并行数不同的数据集

需求说明

用Python Pandas合并两个行数差异较大的数据集:

  • 数据集A(约30万条):列包括Path、Line、Severity、Vulnerability、Name、Text、Title
  • 数据集B(约1000条):列包括Class、Path、DTWC、DR、DW、IDFP

合并规则:

  1. A的Name字段等于B的Path字段
  2. B的Class字段匹配A的Path对应的类名
    符合条件的行将合并为新数据集C

实现步骤及代码

1. 读取并预处理数据集

读取两个数据集,处理分隔符和字段前后的空格:

import pandas as pd

# 读取数据集A,指定分隔符为|,自定义列名
df_a = pd.read_csv('dataset_a.txt', sep='\|', engine='python', header=None, 
                   names=['Path', 'Line', 'Severity', 'Vulnerability', 'Name', 'Text', 'Title'])
# 去除字符串类型列的前后空格
df_a = df_a.apply(lambda col: col.str.strip() if col.dtype == 'object' else col)

# 读取数据集B,同样处理分隔符和空格
df_b = pd.read_csv('dataset_b.txt', sep='\|', engine='python', header=None, 
                   names=['Class', 'Path', 'DTWC', 'DR', 'DW', 'IDFP'])
df_b = df_b.apply(lambda col: col.str.strip() if col.dtype == 'object' else col)

2. 从A的Path中提取对应类名

根据示例中src.bla.bla.class.java对应com.bla.class的规则,从A的Path字段提取匹配B的Class的字段:

# 拆分Path字符串,转换为类名格式(需根据实际路径规则调整)
df_a['Extracted_Class'] = df_a['Path'].str.split('.').apply(lambda parts: 
    '.'.join(['com'] + parts[1:-2] + [parts[-2]])
)
# 示例逻辑:
# 输入Path: src.bla.bla.class.java → 拆分后列表: ['src','bla','bla','class','java']
# 转换后拼接为: com.bla.class

3. 多条件合并数据集

先通过Name和Path关联两个数据集,再筛选出Class匹配的行:

# 按A.Name == B.Path进行内连接
merged_df = pd.merge(df_a, df_b, left_on='Name', right_on='Path', how='inner')

# 筛选出B的Class存在于A提取的类名中的行
df_c = merged_df[merged_df['Class'].isin(merged_df['Extracted_Class'])]

# 将结果保存为|分隔的文本文件(与示例格式一致)
df_c.to_csv('dataset_c.txt', sep='|', index=False, header=False)

注意事项

  • 类名提取逻辑需根据实际路径格式调整,上述代码仅适配示例中的路径规则
  • 若需保留A的所有行(含未匹配到B的行),可将how='inner'改为how='left'

内容的提问来源于stack exchange,提问作者Giammaria Giordano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:24:32