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

如何基于两个Pandas DataFrame的词组合生成匹配标记列

解决Pandas DataFrame词组合匹配并生成标记列

1. 先还原你的两个DataFrame

import pandas as pd

# 构造DataFrame A
df_a = pd.DataFrame({
    'x': ['a', 'b'],
    'disc': ["'tall', 'short', 'medium'", "'small', 'long', 'short'"]
})

# 构造DataFrame B
df_b = pd.DataFrame({
    'y': ["'tall',  'short'", "'short', 'long'", "'small', 'tall'"]
})

2. 预处理数据格式

把列里的字符串形式词列表转换成集合,方便后续做包含性判断:

# 处理df_a的disc列,提取所有词并转成集合
df_a['disc_set'] = df_a['disc'].apply(lambda s: {word.strip().strip("'") for word in s.split(',')})

# 处理df_b的y列,同时生成对应的列名(用空格连接词)
df_b['word_set'] = df_b['y'].apply(lambda s: {word.strip().strip("'") for word in s.split(',')})
df_b['col_name'] = df_b['y'].apply(lambda s: ' '.join([word.strip().strip("'") for word in s.split(',')]))

3. 生成标记列并合并结果

遍历df_b中的每个词组合,判断df_a的disc列是否包含该组合的所有词,是则标记1,否则标记0:

# 逐个处理每个词组合,添加新列
for idx, row in df_b.iterrows():
    col_name = row['col_name']
    target_words = row['word_set']
    df_a[col_name] = df_a['disc_set'].apply(lambda x: 1 if target_words.issubset(x) else 0)

# 移除中间辅助列,得到最终结果
final_df = df_a.drop('disc_set', axis=1)

最终输出结果

xdisctall shortshort longsmall tall
a'tall', 'short', 'medium'100
b'small', 'long', 'short'010

关键说明

  • 用集合的issubset()方法可以高效判断目标词组合是否全部包含在disc的词集合中
  • 先把字符串格式的词列表转成集合,大幅简化了包含性判断的逻辑
  • 列名直接用空格连接组合内的词,完全匹配你要求的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:27:50