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

在Pandas DataFrame的列表中高效查找关联值的方法问询

在Pandas DataFrame中高效搜索列表元素的方法

你的核心需求是在PLACES_DETECTED列的列表中定位特定元素(如A14),并获取PLACE_VALUES列中对应的数值。直接用df.loc[df['PLACES_DETECTED'] == 'A14']无效,是因为该列存储的是列表而非单个元素,无法直接做等值匹配。以下是几种高效的解决方案:

方法1:展开DataFrame(推荐,Pandas原生优化)

将两个列的列表同时展开,让每个元素对应单独一行,之后即可用常规的矢量化筛选操作,效率远高于循环。

代码示例:

import pandas as pd

# 构造示例数据
data = {
    "PLACES_DETECTED": [["A14", "A09", "A08", "A15", "A03"], ["B10", "B19", "A18", "A03", "A14"]],
    "PLACE_VALUES": [[-0.0369, -0.0065, 0.01, -0.0295, -0.0402], [-0.0641, 0.0419, -0.0196, 0.0747, -0.0]]
}
df = pd.DataFrame(data)

# 同时展开两个列表列,保持元素对应关系
expanded_df = df.explode(["PLACES_DETECTED", "PLACE_VALUES"], ignore_index=True)

# 筛选目标元素并获取对应值
target = "A14"
result = expanded_df.loc[expanded_df["PLACES_DETECTED"] == target, "PLACE_VALUES"].tolist()
print(result)  # 输出: [-0.0369, -0.0]

方法2:矢量化匹配(保留原DataFrame结构)

如果不需要修改原数据结构,可以用apply逐行处理,找到目标元素的索引并返回对应值,注意处理元素不存在的情况:

代码示例:

target = "A14"

def get_matching_value(row):
    if target in row["PLACES_DETECTED"]:
        idx = row["PLACES_DETECTED"].index(target)
        return row["PLACE_VALUES"][idx]
    return None

# 应用函数并过滤空值
result = df.apply(get_matching_value, axis=1).dropna().tolist()
print(result)  # 输出: [-0.0369, -0.0]

方法3:提前构建映射字典(适合频繁查询)

若需要多次查询不同元素,可提前构建所有元素与对应值的映射字典,后续查询直接取值,效率最高:

代码示例:

# 构建全局映射字典
place_value_map = {}
for places, values in zip(df["PLACES_DETECTED"], df["PLACE_VALUES"]):
    for p, v in zip(places, values):
        place_value_map[p] = place_value_map.get(p, []) + [v]

# 查询目标元素
print(place_value_map.get("A14", []))  # 输出: [-0.0369, -0.0]

内容的提问来源于stack exchange,提问作者John Cres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:10:33