如何缩短DataFrame的布尔输出过滤代码?循环实现可简化吗
简化Pandas布尔列生成的方法
嘿,这事儿超简单!你现在写的循环代码完全可以用Pandas的矢量化操作来简化,不仅代码更简洁,运行效率还高得多(尤其是数据量大的时候)。
先看看你当前的实现:
a = [] for i in df['Age'].values: if i > 40: a.append(True) else: a.append(False) df['over 40?'] = a
最优简化方案:直接用Series矢量化比较
Pandas的Series天生支持和标量做批量比较,会自动返回一个布尔值的Series,直接赋值给新列就行:
df['over 40?'] = df['Age'] > 40
这一行代码就搞定了你原来循环做的所有事,而且底层是C实现的矢量化运算,比Python循环快好几个量级,数据越多差距越明显。
备选方案:使用apply(不推荐大数据量场景)
如果你更习惯函数式写法,也可以用apply,但性能不如上面的矢量化方法:
df['over 40?'] = df['Age'].apply(lambda x: x > 40)
简单来说,Pandas就是为批量数据操作设计的,尽量别手动遍历每一行——既写得麻烦,又拖慢运行速度~
内容的提问来源于stack exchange,提问作者Vsevolod Cherepanov
相关产品推荐
相关产品推荐

