繁体   English   中英

检查 Python 列表元素是否在 Pandas dataframe 行和 append 到新列

[英]Check if Python list elements are in a Pandas dataframe row and append to a new column

我有一个这样的 dataframe:

卡萨 名称
独舞 Paleta De Padel 阿迪达斯 Metalbone CTRL
独舞 Zapatillas Running Under Armour Charged Stam...
独舞 Rompeviento Con Capucha 锐步 Woven Azu

和一个清单:

Maestro_Marcas=['阿迪达斯', '锐步', '安德玛']

如何检查 df['Name'] 的每一行,查看该行是否包含列表的值,在这种情况下获取列表的值并将其放入新列中? 结果应该是这样的:

卡萨 名称 马卡报
独舞 Paleta De Padel 阿迪达斯 Metalbone CTRL 阿迪达斯
独舞 Zapatillas Running Under Armour Charged Stam... 安德玛
独舞 Rompeviento Con Capucha 锐步 Woven Azu 锐步

您可以将 apply 与 function 一起使用,这样:

Maestro_Marcas=['Adidas', 'Reebebok','Under Armour']

def is_exist(name):
    for i in Maestro_Marcas:
        if i in name:
            return i

df['Marca']  = df.apply(lambda x: is_exist(x['Name']), axis=1)

期望的结果:

    Casa            Name                                                 Marca   
0   Solo Deportes   Paleta De Padel Adidas Metalbone CTRL               Adidas
1   Solo Deportes   Zapatillas Running Under Armour Charged Stamin...   Under Armour
2   Solo Deportes   Rompeviento Con Capucha Reebok Woven Azu        None

我很确定你应该在一点上改进Reebebok ,以便 Reebok vs Reebok调整为你认为合适的。

你可以试试findall

df['Marca'] = df['Name'].str.findall('|'.join(Maestro_Marcas))

注意,它将返回一个查找列表,如果在一个名称中找到两个项目,它将返回两个。

匹配你需要的output

 df['Marca'] = df['Name'].str.findall('|'.join(Maestro_Marcas)).str[0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM