如何对比Pandas DataFrame两列并根据匹配输出对应列值?
Pandas 按列匹配取值的简单解决办法
首先先把你给出的数据整理成清晰的结构:
- A列数据:
[3, 4, 1, 2, 1](共5个元素) - B、C、D是一一对应的4组匹配关系:
B C D 1 Red Yes 2 Blue No 3 Yellow Maybe 4 Green True
不用费劲用iloc逐个定位单元格,Pandas的map()方法就能高效完成这个匹配需求,步骤如下:
1. 构建匹配映射字典
先把B、C、D的对应关系转换成字典,这样可以快速通过B的值找到对应的C和D:
import pandas as pd # 先创建存储B-C-D对应关系的小DataFrame mapping_df = pd.DataFrame({ 'B': [1, 2, 3, 4], 'C': ['Red', 'Blue', 'Yellow', 'Green'], 'D': ['Yes', 'No', 'Maybe', 'True'] }) # 生成B到C、B到D的映射字典 b_to_c = mapping_df.set_index('B')['C'].to_dict() b_to_d = mapping_df.set_index('B')['D'].to_dict()
2. 处理A列生成结果
把你的A列数据放进DataFrame,然后用map()方法批量完成匹配:
# 你的原始A列数据 a_df = pd.DataFrame({'A': [3, 4, 1, 2, 1]}) # 生成对应的C和D结果 a_df['匹配的C值'] = a_df['A'].map(b_to_c) a_df['匹配的D值'] = a_df['A'].map(b_to_d) # 输出你需要的结果格式 print("A", ', '.join(a_df['匹配的C值'].tolist())) print("B", ', '.join(a_df['匹配的D值'].tolist()))
运行结果
执行代码后会输出:
A Yellow, Green, Red, Blue, Red B Maybe, True, Yes, No, Yes
完全符合你想要的结果。
额外说明
set_index('B')是把B列设为索引,这样可以直接通过B的数值来关联对应的C、D值;to_dict()则把这种索引-值的对应关系转换成字典,方便map()调用。map()会自动遍历A列的每个元素,用字典查找对应的取值,比手动用iloc逐个找高效太多,数据量大的时候这个优势会更明显。
内容的提问来源于stack exchange,提问作者Samuel Smith
相关产品推荐
相关产品推荐

