![](/img/trans.png)
[英]Check if elements from a Dataframe column are in another Pandas dataframe row and append to a new column
[英]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.