4 回答

TA贡献1827条经验 获得超4个赞
这个解决方案怎么样,当你有一个新类别时,你所要做的就是将新类别添加到 cats 数组中。
import pandas as pd
import numpy as np
df = pd.DataFrame({'Product Name': ['Nike Zoom Pegasus', 'All New Nike Zoom Pegasus 4', 'Metcon 3', 'Nike Metcon 5']})
cats = ["Pegasus","Metcon"]
df["Category"] = df["Product Name"].apply(lambda x: np.intersect1d(x.split(" "),cats)[0])
output
Product Name Category
0 Nike Zoom Pegasus Pegasus
1 All New Nike Zoom Pegasus 4 Pegasus
2 Metcon 3 Metcon
3 Nike Metcon 5 Metcon

TA贡献1859条经验 获得超6个赞
>>> df = pd.DataFrame({'Product Name': ['Nike Zoom Pegasus', 'All New Nike Zoom Pegasus 4', 'Metcon 3', 'Nike Metcon 5']})
>>> cats = ["Pegasus","Metcon"]
>>> df['Category'] = df["Product Name"].str.extract("(%s)" % "|".join(cats))
Product Name Category
0 Nike Zoom Pegasus Pegasus
1 All New Nike Zoom Pegasus 4 Pegasus
2 Metcon 3 Metcon
3 Nike Metcon 5 Metcon

TA贡献1797条经验 获得超6个赞
怎么样:
import pandas as pd
df = {'Product Name': ['Nike Zoom Pegasus', 'All New Nike Zoom Pegasus 4', 'Metcon 3', 'Nike Metcon 5']}
c = set(['Metcon', 'Pegasus'])
categories = [c.intersection(pn.split(' ')) for pn in df['Product Name']]
df['Categories'] = categories
print(df)
>> {'Product Name': ['Nike Zoom Pegasus', 'All New Nike Zoom Pegasus 4', 'Metcon 3', 'Nike Metcon 5'], 'Categories': [{'Pegasus'}, {'Pegasus'}, {'Metcon'}, {'Metcon'}]}

TA贡献1802条经验 获得超10个赞
您的代码存在的问题如下:
您传递的是产品,但在检查时使用的是
df["Product Name"]
,这会返回整个系列。此外,返回值是产品。但根据预期的答案,要么是
Pegasus
要么Metcon
我想你想要这样的东西。
def get_category(product):
if "Pegasus" in product:
return "Pegasus"
elif "Metcon" in product:
return "Metcon"
添加回答
举报