当我在 Python 中使用 Iflese 时,a 的真值不明确
The truth value of a is ambiguous when I used Iflese in Python
我在数据框中使用条件乘法并使用以下语法:
if(df_merged1["region_id"]=="EMEA"):
df_merged1["fcst_gr"] = df_merged1["plan_price_amount"]*(df_merged1["Enr"]-df_merged1["FM_f"])+df_merged1["OA_f"]-df_merged1["TX_f"]
else:
df_merged1["fcst_gr"] = df_merged1["plan_price_amount"]*(df_merged1["Enr"]-df_merged1["FM_f"])+df_merged1["OA_f"]
我希望仅在区域为 EMEA 时减税。但出现以下错误
ValueError: The truth value of a {type(self).__name__} is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我认为在证明 if 条件时存在一些问题,但如何解决它却一无所知
这里没有问题 - df_merged1["region_id"] == "EMEA"
returns 填充了布尔值的 pd.Series
实例,而不是可以使用条件语句处理的布尔值。 Pandas 不愿意自动 运行 将 pd.Series
实例转换为布尔值的方法,如 Series.any()
或 Series.all()
,因此出现错误。
要实现您的目标,请使用 df.apply, axis=1
with a lambda expression and a ternary operator。这样你就可以根据每个单独行的 ["region_id"]
列中的值填充一个 ["fcst_gr"]
列:
df_merged1["fcst_gr"] = df_merged1.apply(
lambda row: row["plan_price_amount"] * (row["Enr"] - row["FM_f"])
+ row["OA_f"]
- row["TX_f"]
if row["region_id"] == "EMEA"
else row["plan_price_amount"] * (row["Enr"] - row["FM_f"]) + row["OA_f"],
axis=1,
)
我在数据框中使用条件乘法并使用以下语法:
if(df_merged1["region_id"]=="EMEA"):
df_merged1["fcst_gr"] = df_merged1["plan_price_amount"]*(df_merged1["Enr"]-df_merged1["FM_f"])+df_merged1["OA_f"]-df_merged1["TX_f"]
else:
df_merged1["fcst_gr"] = df_merged1["plan_price_amount"]*(df_merged1["Enr"]-df_merged1["FM_f"])+df_merged1["OA_f"]
我希望仅在区域为 EMEA 时减税。但出现以下错误
ValueError: The truth value of a {type(self).__name__} is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我认为在证明 if 条件时存在一些问题,但如何解决它却一无所知
这里没有问题 - df_merged1["region_id"] == "EMEA"
returns 填充了布尔值的 pd.Series
实例,而不是可以使用条件语句处理的布尔值。 Pandas 不愿意自动 运行 将 pd.Series
实例转换为布尔值的方法,如 Series.any()
或 Series.all()
,因此出现错误。
要实现您的目标,请使用 df.apply, axis=1
with a lambda expression and a ternary operator。这样你就可以根据每个单独行的 ["region_id"]
列中的值填充一个 ["fcst_gr"]
列:
df_merged1["fcst_gr"] = df_merged1.apply(
lambda row: row["plan_price_amount"] * (row["Enr"] - row["FM_f"])
+ row["OA_f"]
- row["TX_f"]
if row["region_id"] == "EMEA"
else row["plan_price_amount"] * (row["Enr"] - row["FM_f"]) + row["OA_f"],
axis=1,
)