You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效基于pandas DataFrame其他行数据更新指定行的疫苗状态

Pandas 百万行级等效疫苗状态更新方案

核心思路完全基于Pandas原生向量化操作,避免Python层级的行遍历,适配200万行及以上的数据量,性能损耗极低,无需关心等效疫苗行是否相邻。

实现逻辑

  1. 先为所有疫苗划分等效组:把属于同一等效关系的疫苗映射到同一个分组ID,非等效疫苗单独分组
  2. 按「患者ID + 等效组」聚合,统计每个分组内是否存在已接种的记录
  3. 基于规则批量更新状态:
    • 原状态为Ok的行直接保留原有状态
    • 原状态为Missing的行,若所属分组存在已接种记录,更新为Applied equivalent vaccine,否则保留Missing

代码实现

import pandas as pd

# 1. 自定义等效疫苗分组映射,可根据实际业务扩展多组等效疫苗
vaccine_equiv_map = {
    "A": "g1",
    "B": "g2",
    "C": "g2"
}

# 2. 新增辅助列:等效组标识、同组是否有接种记录
df["equiv_group"] = df["疫苗种类"].map(vaccine_equiv_map)
df["has_equiv_vaccinated"] = df.groupby(["患者ID", "equiv_group"])["是否已接种"].transform("max")

# 3. 批量生成目标状态列
df["desired_status"] = df["当前状态"]
update_mask = (df["当前状态"] == "Missing") & (df["has_equiv_vaccinated"] == 1)
df.loc[update_mask, "desired_status"] = "Applied equivalent vaccine"

# 可选:删除中间辅助列
df.drop(columns=["equiv_group", "has_equiv_vaccinated"], inplace=True)

性能优化提示

  • 可提前将「患者ID」「疫苗种类」字段转换为category类型,可降低30%以上的分组计算耗时,同时减少内存占用
  • 若后续数据量超过1000万行,可进一步使用Dask库并行计算,上述逻辑无需修改即可无缝迁移

内容的提问来源于stack exchange,提问作者Bruno Prates

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:15:01