为什么我得到? Series 的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

Why do I get ? The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

我正在尝试做一个简单的 0/1 标志

我的数据是

df = pd.dataframe({"id_gigya" :("A","B","C","D"), "material": ("FA","PE","AU","FA")})

我想要的输出是

id_gigya   material   flag_fa
 A         FA        1
 B         PE        0
 C         AU        0
 D         FA        1

我使用了 apply lambda 但出现错误。

df['flag_fa'] = df.apply(lambda x : 1 if df['material_group'] == 'FA' else 0)

我的错误是

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index id_gigya'

请告诉我如何解决这个问题。

提前致谢

这里

df['flag_fa'] = df['material_group'].eq('FA').astype(int)

df['flag_fa'] = np.where(df['material_group'].eq('FA'), 1, 0)

df['flag_fa'] = df['material_group'].eq('FA').map({True : 1, False : 0})

当您在系列上 apply 一个 lambda 函数时,您是将该函数应用于该系列的每个元素。所以要正确使用apply,语法应该是:

df['flag_fa'] = df["material"].apply(lambda x : 1 if x == 'FA' else 0)

但更好的是使用np.where