我有以下布尔函数,该函数比较两个值,但有一些后备功能:
def __score_bool(a, b,
default_element_value_if_null=None,
default_score_if_any_element_is_null=None):
if (default_element_value_if_null is not None):
if (a is None): a = default_element_value_if_null
if (b is None): b = default_element_value_if_null
if a == b:
return 1
if (a is None or b is None) and default_score_if_any_element_is_null:
return default_score_if_any_element_is_null
else:
return 0
现在,我想向数据框添加一个附加字段,以将一个字段与静态值进行比较。例如:
df['score_name'] = df.apply(__score_bool, 'name', 'thomas')
在上面,我想将每一行中的“名称”与值“托马斯”进行比较。一个例子是:
开始:
>>> import pandas as pd
>>> df = pd.DataFrame([{'name': 'eric'}, {'name': 'thomas'}])
>>> df
name
0 eric
1 thomas
我正在尝试做的是:
name score_name
'eric' 0
'thomas' 1
我该怎么做?
我目前使用的方法是:
df['score_name'] = df.apply(lambda row: __score_bool(row['name'], 'thomas'), axis=1)
但这似乎非常粗糙,必须先将其传递给lambda函数(以提取行),然后必须将其传递给另一个函数以提取列值。有更直接的方法可以做到这一点吗?
问题来源:stackoverflow
IIUC,您可以执行以下操作:
df['score_name'] = df['name'].apply(__score_bool, b='thomas')
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。