如何在pandas DataFrame中新增列取指定列与固定值的最小值
报错原因
Python 内置的min()函数仅支持对标量值做大小比较,你传入了Pandas Series(df["A"])和标量X两个参数时,函数无法直接对整个Series数组做布尔判断,因此触发真值歧义的报错。
正确实现方式
推荐使用性能更高的向量化操作实现逐行比较,常用两种写法:
写法1:使用numpy.minimum逐元素比较
np.minimum会自动对输入的数组/标量做广播,逐元素返回较小值:
import numpy as np import pandas as pd data = { 'A':[0,0,1,1,1,1,1,1,1], 'B':[0,0,1,1,0,1,4,1,2], 'C':[0,10,130,1,0,1,4,1,12] } X=5 df=pd.DataFrame(data) df["D"] = np.minimum(df["A"], X) print(df)
写法2:使用Pandas自带的clip裁剪方法
通过指定上限参数upper,可以直接把A列的最大值限制为X,效果等价于逐行取和X的最小值:
df["D"] = df["A"].clip(upper=X)
如果数据量很小,也可以用逐行apply的写法,性能低于上述两种向量化方案:
df["D"] = df["A"].apply(lambda x: min(x, X))
内容的提问来源于stack exchange,提问作者Naor
相关产品推荐
相关产品推荐

