Python 通过比较列表中的值是否为字符串来填充列
我感谢你的帮助 我有两个数据集:Python 通过比较列表中的值是否为字符串来填充列,python,pandas,Python,Pandas,我感谢你的帮助 我有两个数据集: models = pd.DataFrame({"manufacturer":['Nokia', 'Samsung', 'Motorola', 'Nokia', 'Alcatel', 'Nokia 5'], "model":['3310', 'S4', 'Moto G', 'N1', 'Pixy', 'Nokia 5']}) data = pd.DataFrame({"title":["Brand New Nokia 3310",
models = pd.DataFrame({"manufacturer":['Nokia', 'Samsung', 'Motorola', 'Nokia', 'Alcatel', 'Nokia 5'],
"model":['3310', 'S4', 'Moto G', 'N1', 'Pixy', 'Nokia 5']})
data = pd.DataFrame({"title":["Brand New Nokia 3310", "Old Samsung S4", "Cool Motorola Moto G", 'New Alcatel', 'Old Nokia 5'],
"manufacturer":['Nokia', "Samsung", "Motorola", 'Alcatel', 'Nokia'],
"model":["placeholder", "placeholder", "placeholder", "placeholder", "placeholder"]})
我需要在数据['model']中填充模型值,条件是标题中的字符串包含模型字符串,否则该列中的值应保持占位符
我试着用一个列表来理解,但它不起作用
mod = models["model"].tolist()
title = data['title']
data['model'] = pd.Series([m for m in mod for t in title if m in]
我还尝试使用“str.contains”,这是一种新的方法:
for m in mod:
if title.str.contains(m):
data['model'] = m
但这也不像我预期的那样有效。有办法吗?
提前感谢。请显示您的预期输出。您接受的答案效率很低。有了预期输出的一点提示(如我所要求的),您会得到更好的解决方案。@cs95,我接受了答案,因为这是一个有效的解决方案。你能详细说明你所说的低效是什么意思吗?正如我所描述的,很明显我期望得到什么。如果模型数据集中的模型值位于标题字符串中,则将该值放在数据数据集中模型列的相应行中,否则,请保留占位符。如果您认为您有更好的解决方案,请随时提供您的解决方案,并解释您为什么声称它更好,我将接受您的答案,以便有相同问题的人能够找到最佳和最有效的解决方案。是的,这对我来说是显而易见的,对其他人来说也是显而易见的,因为您接受了答案,但我们仍然要求问题有一个清晰的答案,清楚地显示输入和预期输出(此处缺少)。在性能方面,@cs95,谢谢你,我以后会考虑的。但是,请随意添加您的解决方案。
mod = models["model"]
data["model"] = data["title"].map(lambda s: next((m for m in mod if m in s), "placeholder"))