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

如何在Pandas DataFrame中根据列表元素索引匹配对应列值?

Pandas根据列表索引匹配对应元素的实现方法

首先构造示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'col_a': ['hello'],
    'col_b': [['goodbye', 'how are you', 'hello']],
    'col_c': [['farewell', 'question', 'greeting']]
})

方法一:逐行处理(直观易懂)

使用apply遍历每一行,先获取col_a值在col_b列表中的索引,再用该索引提取col_c对应元素:

df['result'] = df.apply(lambda row: row['col_c'][row['col_b'].index(row['col_a'])], axis=1)

如果需要处理col_a不在col_b中的异常情况,可自定义函数捕获错误:

def get_matching_element(row):
    try:
        idx = row['col_b'].index(row['col_a'])
        return row['col_c'][idx]
    except ValueError:
        return pd.NA  # 也可返回None或其他默认值

df['result'] = df.apply(get_matching_element, axis=1)

方法二:矢量化处理(高效适合大数据集)

当数据量较大时,apply的逐行遍历效率偏低,可通过explode展开列表后匹配:

# 展开col_b和col_c列表,保留原行索引
exploded_df = df.explode(['col_b', 'col_c'], ignore_index=False)
# 筛选col_a与col_b值相等的行,提取对应col_c
matched_result = exploded_df[exploded_df['col_a'] == exploded_df['col_b']]['col_c']
# 将结果合并回原DataFrame
df = df.join(matched_result.rename('result'))

运行后,df['result']列即为所需的匹配元素,示例中结果为'greeting'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:17:06