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

如何基于Pandas DataFrame为相同标签生成匹配及不匹配的定义对

实现思路

  1. 按label字段分组处理,避免不同标签的定义交叉生成无效配对
  2. 对每个标签分组,生成组内所有def1和def2的笛卡尔积配对
  3. 对每一组配对,判断是否和原始行的匹配关系一致,对应设置match值为1或0,同时保留原始行的Id和label字段

完整可运行代码

import pandas as pd
from itertools import product

# 输入数据,可替换为你读取CSV得到的DataFrame
df = pd.DataFrame(
    data=[['q54', 'apple', 'fruit apple', 'fruit'],
          ['q55', 'apple', 'inc', 'apple inc']],
    columns=['Id', 'label', 'def1', 'def2']
)

result = []
# 按标签分组处理
for label, group in df.groupby('label'):
    original_rows = group.to_dict('records')
    def1_list = group['def1'].tolist()
    def2_list = group['def2'].tolist()
    # 生成组内所有def1和def2的配对
    for def1, def2 in product(def1_list, def2_list):
        # 匹配当前def1对应的原始行,获取Id
        match_row = next(row for row in original_rows if row['def1'] == def1)
        # 判断是否为原始匹配对
        match_val = 1 if match_row['def2'] == def2 else 0
        result.append({
            'Id': match_row['Id'],
            'label': label,
            'def1': def1,
            'def2': def2,
            'match': match_val
        })

# 生成最终DataFrame
result_df = pd.DataFrame(result)
print(result_df)

输出结果

针对你提供的测试数据,运行后输出如下:

Id  label         def1       def2  match
0  q54  apple  fruit apple      fruit      1
1  q54  apple  fruit apple  apple inc      0
2  q55  apple          inc      fruit      0
3  q55  apple          inc  apple inc      1

如果你替换输入为你问题开头的3行Apple样本数据,代码无需修改即可生成符合要求的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:48:04