我正在使用如下所示的DataFrame:
我想创建一个新列“ Named”,以便在线性回归中使用分类列“ Name”。我做了以下工作以实现该目标:
def named(name):
if name == 'UNNAMED':
return 0
else:
return 1
df['Named'] = df['Name'].apply(lambda name: named(name))
但是,这给出的列仅包含值1
该函数可以单独工作,但是由于某些原因,在DataFrame.apply方法中使用该函数时,该行为不起作用。
答案 0 :(得分:1)
以下方法应该起作用:
df['Named']=[i for i in map(lambda x: 0 if x.strip()=='UNNAMED' else 1, df['Name'])]
答案 1 :(得分:1)
df.assign(Named = lambda df: (df["Name"]!='UNNAMED').astype(int))
named
。该对象显然不等于UNNAMED
,因此,您得到了1。您是否尝试过applymap
?这对我有效,如您所愿此外,在最新的熊猫版本中,我无法重现您的示例,我看到此错误消息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().