Python中基于整数创建二元分类新列及报错解决
解决Pandas中ValueError: The truth value of a Series is ambiguous的问题
你遇到的错误是因为直接用if判断整列的布尔结果导致的——fourthcycle_df["Size1"] <= 1001返回的是一个布尔Series(每一行对应一个True/False),Pandas无法确定你要判断"所有行满足"还是"任意行满足",所以抛出歧义错误。
以下是几种可行的解决方法:
方法1:使用numpy.where(推荐,矢量化效率高)
这是处理这种条件赋值最简洁的方式,直接对整列进行矢量化操作:
import numpy as np fourthcycle_df["NewSize"] = np.where(fourthcycle_df["Size1"] <= 1001, "1-1001", "1001+")
方法2:使用Pandas的loc索引赋值
先初始化新列,再给符合条件的行批量赋值:
# 先给所有行默认赋值"1001+" fourthcycle_df["NewSize"] = "1001+" # 筛选出Size1<=1001的行,修改NewSize的值 fourthcycle_df.loc[fourthcycle_df["Size1"] <= 1001, "NewSize"] = "1-1001"
方法3:使用apply方法(适合小数据集)
通过lambda函数对每个元素单独判断,不过效率低于前两种矢量化方法:
fourthcycle_df["NewSize"] = fourthcycle_df["Size1"].apply(lambda x: "1-1001" if x <= 1001 else "1001+")
内容的提问来源于stack exchange,提问作者Benji
相关产品推荐
相关产品推荐

