如何在DataFrame中匹配两列后返回对应第三列的单个值
双列匹配提取对应列值的实现方案
现有DataFrame df2的结构如下:
ColA ColB ColC A 1 Bob A 2 Cat B 3 Hi
在遍历另一个DataFrame df1的过程中,已知当前迭代得到Val1='A'、Val2='1',需要提取df2中对应匹配行的ColC列值(即Bob),以下是几种可行的实现方式:
方法1:直接定位目标列并取值
在你现有条件过滤的基础上,直接指定目标列ColC,再通过iloc[0]获取单个匹配值(确保匹配结果唯一时适用):
target_value = df2.loc[(df2['ColA'] == Val1) & (df2['ColB'] == Val2), 'ColC'].iloc[0]
方法2:设置复合索引提升查找效率
如果需要多次执行这类查找,建议先给df2设置ColA和ColB为复合索引,后续查找会更高效:
# 提前设置复合索引 df2_indexed = df2.set_index(['ColA', 'ColB']) # 每次查找时直接通过索引定位 target_value = df2_indexed.loc[(Val1, Val2), 'ColC']
方法3:批量匹配(避免循环更高效)
如果你的需求是给df1整列批量匹配对应值,不建议用循环遍历,直接使用merge方法一次性完成匹配:
# 假设df1中存储Val1、Val2的列名为'ColA_df1'、'ColB_df1' df1 = df1.merge( df2[['ColA', 'ColB', 'ColC']], left_on=['ColA_df1', 'ColB_df1'], right_on=['ColA', 'ColB'], how='left' )
执行后df1会新增匹配到的ColC列,数据量大时这种方法的效率远高于循环遍历。
内容的提问来源于stack exchange,提问作者BeeLi BaaLa
相关产品推荐
相关产品推荐

