我有2栏; 名称和品牌名称。第一列包含产品名称之类的值,而第二列则是产品的品牌名称。在某些情况下,它们具有相似的名称-例如,可口可乐。
在上图中,您可以确切地看到我在说什么。我将保留一段代码用于测试:
data = [['Coca Cola', 'Coca Cola'], ['Coca Cola cherry', 'Coca Cola'], ['Coca Cola life', 'Coca Cola'], ['Coca Cola Life', 'Coca Cola']]
testdf = pd.DataFrame(data, columns = ['Name', 'BrandName'])
我要做的是,只要产品名称包含与品牌名称相同的词,就将 BrandName 列中的每个值都设置为“ Unknown”。以上面的图片为例。我只能使用以下代码将第一行的品牌名称设置为“未知”:
testdf["BrandName"] = np.where(testdf["Name"] == testdf["BrandName"], "Unknown", testdf["BrandName"])
但是,我还没有弄清楚如何设置条件,因此当名称包含 BrandName 列的全部内容时,后者的值将变为“未知”。
答案 0 :(得分:1)
您可以将自定义lambda函数从this传递到np.where
:
import re
f = lambda x: bool(re.search(r'\b{}\b'.format(x['BrandName']), x['Name']))
testdf['match'] = np.where(testdf.apply(f, axis = 1), "Unknown", testdf["BrandName"])
print (testdf)
Name BrandName match
0 Coca Cola Coca Cola Unknown
1 Coca Cola cherry Coca Cola Unknown
2 Coca Cola life Coca Cola Unknown
3 Coca Cola Life Coca Cola Unknown
答案 1 :(得分:1)
这是使用SELECT COUNT(LEVEL) AS number, LEVEL, user, department FROM table
WHERE LEVEL ='3' AND TIMESTAMP>= 1500098552 AND TIMESTAMP<= 1568000152
GROUP BY user,department,LEVEL ORDER BY number DESC
和mask
的一种方法:
apply