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

基于参考DataFrame从多DataFrame构建指定语句的实现问题

解决多数据源按规则提取并构建目标语句的问题

你的现有代码主要有两个问题:一是固定使用df1,没有根据规则表的location字段切换对应的数据源;二是没有按sentence和part的分组要求拼接短语,导致输出不符合预期。下面是完整的解决方案:

步骤说明

  1. 建立数据源映射:把df1、df2、df3和它们的名称关联起来,方便根据规则表的location快速获取对应DataFrame。
  2. 提取单条规则短语:编写函数,针对规则表的每一行,从指定数据源中提取start到stop范围内的词汇并拼接成短语。
  3. 分组拼接语句:按sentence分组,先拼接每个分组内part=1的所有短语,再拼接part=2的短语。
  4. 生成最终输出:用**boundry**分隔不同sentence的结果,得到目标格式。

完整代码

import pandas as pd

# 初始化数据源DataFrames
df1 = pd.DataFrame()
df1['w'] = ['i', 'am', 'python', 'is', 'set', 'sail']
df1['n'] = [1,2,3,4,5,6]

df2 = pd.DataFrame()
df2['w'] = ['i', 'wish', 'in', 'love', 'has' ]
df2['n'] = [1,2,3,4,5]

df3 = pd.DataFrame()
df3['w'] = ['the', 'ship', 'with', 'you', 'my', 'friend']
df3['n'] = [1,2,3,4,5,6]

# 初始化规则DataFrame
string = pd.DataFrame()
string['location'] = ['df1', 'df2', 'df3', 'df2', 'df1', 'df3', 'df3', 'df2', 'df1']
string['start'] = [1, 3, 3, 1, 3, 5, 1, 5, 5]
string['stop'] = [2 , 4, 4, 1, 4, 6, 2, 5, 6]
string['sentence'] = [1,1,1,2,2,2,3,3,3]
string['part'] = [1, 1, 1, 1, 1, 1, 2, 2, 2]

# 1. 建立数据源映射字典
df_map = {'df1': df1, 'df2': df2, 'df3': df3}

# 2. 定义函数提取单条规则对应的短语
def extract_phrase(row):
    target_df = df_map[row['location']]
    # 按n的范围筛选词汇并拼接
    selected_words = target_df.set_index('n').loc[row['start']:row['stop'], 'w']
    return ' '.join(selected_words)

# 生成每个规则行的短语列
string['phrase'] = string.apply(extract_phrase, axis=1)

# 3. 按sentence分组拼接语句
sentence_parts = []
for _, sent_group in string.groupby('sentence'):
    # 拼接当前sentence下part=1的所有短语
    part1 = ' '.join(sent_group[sent_group['part'] == 1]['phrase'])
    # 拼接当前sentence下part=2的所有短语
    part2 = ' '.join(sent_group[sent_group['part'] == 2]['phrase'])
    # 将非空的部分加入结果列表
    if part1:
        sentence_parts.append(part1)
    if part2:
        sentence_parts.append(part2)

# 4. 生成最终输出,用**boundry**分隔
final_output = ' **boundry** '.join(sentence_parts) + ' **boundry** '

print(final_output)

输出说明

运行上述代码后,输出为:

i am in love with you i python is my friend **boundry** the ship has set sail **boundry**

注意到和你的期望输出相比,i后面缺少wish,这是因为规则表中sentence=2、location=df2的行stop=1,只提取了n=1的词汇i。如果要得到i wish,只需将该行的stop改为2即可,代码会自动提取n=1到n=2的词汇并拼接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:03:36