根据条件插入随机值

时间:2019-09-11 11:18:26

标签: python pandas numpy

我有以下DataFrame,其中包含有关某个产品的各种信息。 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))

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

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

这里的问题是 Full_Input_Length 应该小于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。

我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

如果保证您在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)