基于条件插入随机值

2024-04-25 06:13:49 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的数据框包含了关于某个产品的各种信息。Input3是创建的句子列表,如下所示:

sentence_list = (['Køb online her','Sammenlign priser her','Tjek priser fra 4 butikker','Se produkter fra 4 butikker', 'Stort udvalg fra 4 butikker','Sammenlign og køb'])
df["Input3"] = np.random.choice(sentence_list, size=len(df))

完整输入是通过连接各个列创建的字符串,其内容类似于:“来自品牌的产品名称-在此处在线购买-网站名称”。它是这样创建的:

df["Full_Input"] = df['TitleTag'].astype(str) +  " " + df['Input2'].astype(str) + " " + df['Input3'].astype(str) + " " +  df['Input4'].astype(str) + " " +  df['Input5'].astype(str) 

enter image description here

这里的问题是完整输入长度应小于55。因此,我试图找出如何在随机生成Input3时设置一个条件,这样当它与其他列的字符串相加时,整个输入长度不会超过55。你知道吗

这就是我所尝试的:

for col in range(len(df)):
    condlist = [df["Full_Input"].apply(len) < 55]
    choicelist = [sentence_list]
    df['Input3_OK'][col] = np.random.choice.select(condlist, choicelist)

正如所料,它不是那样工作的。np.random.choice.select不是什么东西,我得到了一个AttributeError。你知道吗

我该怎么做呢?你知道吗


Tags: dflennprandomsentencelistchoicestr
1条回答
网友
1楼 · 发布于 2024-04-25 06:13:49

如果保证在Input3中至少有一个项目满足此条件,则可能需要尝试类似于仅对sentence_list中具有可接受长度的值进行随机选择:

# convert to series to enable use of pandas filtering mechanism:
my_sentences = [s for s in sentence_list if len(s) < MAX_LENGTH]

# randomly select from this filtered list:
np.random.choice(my_sentences)

换句话说,在调用random.choice之前,对每个字符串列表执行筛选。你知道吗

您可以对数据帧中的每一行运行此命令,如下所示:

def choose_string(full_input):
    return np.random.choice([
        s 
        for s in sentence_list 
        if len(s) + len(full_input) < 55
    ])

df["Input3_OK"] = df.Full_Input.map(choose_string)

相关问题 更多 >