如何从pandas DataFrame列表类型列中提取匹配值对应的同位置数值
问题排查
你原有代码存在3个问题:
- 关键词拼写错误:需要匹配的
jkel被误写为jekl,无法匹配到目标内容 str.contains()方法仅适用于字符串类型的列,你的Address列存储的是列表,该方法无法正确识别列表内部元素- 遍历DataFrame的逻辑错误:直接
for row in df遍历的是DataFrame的列名,而非每一行的数据
实现代码
步骤1:构造示例数据(测试用)
import pandas as pd df = pd.DataFrame({ "Address": [["abcd", "jkel", "swkg"], ["eszl", "pqks", "jkel"], ["jkel", "sqzg"]], "Value": [[30, 25, 87], [21, 35, 42], [11, 34]] })
步骤2:数据处理(两种可选写法)
写法1:遍历处理,逻辑易懂
target = "jkel" result_list = [] for addr_list, val_list in zip(df["Address"], df["Value"]): if target in addr_list: idx = addr_list.index(target) result_list.append({"Address": target, "Value": val_list[idx]}) result_df = pd.DataFrame(result_list)
写法2:pandas apply 简洁写法
target = "jkel" # 筛选包含目标值的行 df = df[df["Address"].apply(lambda x: target in x)] # 提取对应位置的Value值 df["Value"] = df.apply(lambda row: row["Value"][row["Address"].index(target)], axis=1) # 替换Address列为固定目标值 df["Address"] = target # 重置索引得到最终结果 result_df = df.reset_index(drop=True)
输出结果
运行以上代码得到的result_df即为你需要的格式:
| Address | Value |
|---|---|
| jkel | 25 |
| jkel | 42 |
| jkel | 11 |
内容的提问来源于stack exchange,提问作者user16599218
相关产品推荐
相关产品推荐

