如何在pandas DataFrame的列表类型单元格中查找指定值对应的行
解决方案
你可以直接使用pandas原生语法实现需求,无需额外封装类,两种核心需求的实现方式如下:
1. 查询指定PLZ对应的行或Place字段
直接通过apply判断目标值是否在PLZ列表中,筛选对应行即可:
# 目标查询PLZ target_plz = 8405 # 筛选包含该PLZ的整行数据 matched_rows = df[df["PLZ"].apply(lambda plz_list: target_plz in plz_list)] # 仅提取对应的Place字段 matched_places = matched_rows["Place"].tolist()
2. 汇总所有PLZ为一个总列表
通过explode展开PLZ列的列表结构后去重,即可得到全量PLZ列表:
# 去重后的全量PLZ列表 all_plz = df["PLZ"].explode().unique().tolist()
高频查询优化方案
如果你需要频繁查询不同PLZ对应的Place,提前构建映射字典可以将每次查询的时间复杂度降到O(1),同时也能直接拿到全量PLZ列表:
# 提前构建PLZ到Place的映射字典 plz_place_map = {} for _, row in df.iterrows(): for plz_val in row["PLZ"]: plz_place_map[plz_val] = row["Place"] # 直接查询 print(plz_place_map.get(8405)) # 输出 Winterthur # 直接获取全量PLZ列表 all_plz = list(plz_place_map.keys())
小提示:你当前使用的
df.append()方法在pandas 2.0及以上版本已被弃用,推荐改用pd.concat()实现新增行操作,示例:df = pd.concat([df, pd.DataFrame([new_row1])], ignore_index=True)
内容的提问来源于stack exchange,提问作者Veritas_in_Numeris
相关产品推荐
相关产品推荐

