为什么我得到? 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
。
我正在尝试做一个简单的 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
。