如何将dataframe中匹配类型行的前后n条记录标记为相同类型
实现方案
你可以直接用pandas的shift偏移方法构造布尔掩码来实现,这是向量化操作,效率远高于自定义apply循环,也不会出现你之前遇到的参数类型问题,代码如下:
import pandas as pd # 读入你的数据,若已经构造好了df可跳过这步 df = pd.read_csv("your_data_path.csv") # 构造判断掩码:命中「当前行/上一行/下一行是Defect」的所有行 defect_mask = (df["TYPE"] == "Defect") | (df["TYPE"].shift(1) == "Defect") | (df["TYPE"].shift(-1) == "Defect") # 给命中的行赋值Defect df.loc[defect_mask, "TYPE"] = "Defect" # 导出结果 df.to_csv("result.csv", index=False)
原理说明
df["TYPE"].shift(1):将TYPE列整体向下偏移1行,每一行取值对应原数据上一行的TYPE值,用来判断当前行的前一行是不是Defectdf["TYPE"].shift(-1):将TYPE列整体向上偏移1行,每一行取值对应原数据下一行的TYPE值,用来判断当前行的后一行是不是Defect- 三个条件取或后,刚好覆盖你需要标记的所有行,完全匹配你的预期输出要求。
内容的提问来源于stack exchange,提问作者Wing Shum
相关产品推荐
相关产品推荐

