【问题标题】:add random elemnt from list to existing dataframe string将列表中的随机元素添加到现有数据框字符串
【发布时间】:2021-08-11 11:08:15
【问题描述】:

我有一个数据框。 df['技能']=python、sql、java。现在对于每个字符串,我想添加随机元素(高、低、中)。例如:df['Skill']=python:high, sql:low, java:medium.

我尝试了一个代码,但它在字符串末尾添加了 score['low', 'high', 'medium']。

有人可以建议我怎么做。

score=['low','medium','high']
df[Skill']=df['Skill'].apply(lambda x:[x + ": " + "".join(w for w in random.choice(score))])

输出:

['python, java, sql: medium']

但我想要的是python: low, java: high, sql: medium

【问题讨论】:

  • lambda x: " ".join(w": "+s for w, s in zip(x.split(' '), random.choice(score, x.count(' ')))) 你必须通过拆分来应用每个单词
  • df['Skills']= d['Skills'].apply(lambda x: ", ".join(w +": "+s for w, s in zip(x.split (', '), random.choice(score)))) 我得到的输出是--- python: l , java: o, sql: w
  • 您的“技能”列中是否有值 sql: mediumapply() 给出了此结果?
  • 我尝试了映射并申请。两者都给了我相同的结果
  • 技能列中没有 [sql: medium] 只有技能列中存在 [sql] 我得到的输出是使用应用功能

标签: python pandas numpy apply


【解决方案1】:

检查一下:

df['Skill']= df['Skill'].apply(lambda x:','.join([y+': '+random.choice(score) for y in x.split(',')]))

【讨论】:

  • 'Series' 对象没有属性 'split' 这是我得到的错误
  • 对不起,我在 apply 函数中使用了变量名 x,已编辑,现在检查
  • 是的,我理解错误也理解逻辑,我已经解决了我的问题谢谢。
【解决方案2】:

试试这个:

import random
skill = ['python','java', 'sql', 'html']
score=['low','medium','high']
select_score = list()
for i in range(len(skill)):
    select_score.append(random.choice(score))

select_score

freq_s = (dict(zip(skill, select_score)))
freq_s

输出:

{'python': 'medium', 'java': 'low', 'sql': 'medium', 'html': 'low'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2023-02-15
    • 1970-01-01
    • 2022-07-20
    • 2020-03-08
    相关资源
    最近更新 更多