Dat*_*oob 0 python lambda conditional pandas
我仍然在使用python和pandas.我正在努力改进关键字评估.我的DF看起来像这样
Name Description
Dog Dogs are in the house
Cat Cats are in the shed
Cat Categories of cats are concatenated
I am using a keyword list like this ['house', 'shed', 'in']
Run Code Online (Sandbox Code Playgroud)
我的lambda函数看起来像这样
keyword_agg = lambda x: ' ,'.join x if x is not 'skip me' else None
Run Code Online (Sandbox Code Playgroud)
我正在使用一个函数来识别和评分每一行的关键字匹配
def foo (df, words):
col_list = []
key_list= []
for w in words:
pattern = w
df[w] = np.where(df.Description.str.contains(pattern), 1, 0)
df[w +'keyword'] = np.where(df.Description.str.contains(pattern), w,
'skip me')
col_list.append(w)
key_list.append(w + 'keyword')
df['score'] = df[col_list].sum(axis=1)
df['keywords'] = df[key_list].apply(keyword_agg, axis=1)
Run Code Online (Sandbox Code Playgroud)
该函数使用工作将关键字附加到列,然后根据匹配创建1或0.该函数还会创建一个带有'word + keyword'的列,并为每一行创建单词或'skip me'.
我期待申请这样的工作
df['keywords'] = df[key_list].apply(keyword_agg, axis=1)
Run Code Online (Sandbox Code Playgroud)
返回
Keywords
in, house
in, shed
None
Run Code Online (Sandbox Code Playgroud)
相反,我得到了
Keywords
in, 'skip me' , house
in, 'skip me', shed
'skip me', 'skip me' , 'skip me'
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解释为什么当我试图排除它们时,"跳过我"字符串会显示出来吗?
该is运营商(和is not)检查引用相等.
您应该使用等于运算符,它将为大多数基元检查值的相等性:
lambda x: ' ,'.join(x) if x != 'skip me' else NoneRun Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |