如何不使用循环为Pandas DataFrame的Data2列条件赋值?
无需循环的实现方案
当然有,Pandas本身提供了多种矢量化操作的方式,比循环更高效(尤其是数据量较大时),也更符合Pandas的惯用写法,以下是几种常用方案:
方法1:使用numpy.where(最直观的条件赋值)
利用np.where根据Status的布尔值直接生成对应列的值,一步完成赋值:
import pandas as pd import numpy as np d = {"Data1":[1,2,5], "Data2":["","",""], "Status": [False, True, True]} df = pd.DataFrame(data = d) # 核心代码 df["Data2"] = np.where(df["Status"], "Done", "")
方法2:使用Series.map映射布尔值
把布尔值通过字典映射成目标字符串:
df["Data2"] = df["Status"].map({True: "Done", False: ""})
方法3:布尔索引直接赋值
先给所有行设为空字符串,再定位Status为True的行赋值"Done":
df["Data2"] = "" df.loc[df["Status"], "Data2"] = "Done"
这三种方法都不需要手动遍历行,Pandas会在底层优化执行效率,比你原来的循环代码更简洁高效。
内容的提问来源于stack exchange,提问作者teteh May
相关产品推荐
相关产品推荐

