如何用列表推导式从DataFrame按公司名提取对应区域值?
解决方法
方法一:用merge(推荐)
这是Pandas处理DataFrame关联匹配的标准操作,效率高且代码简洁:
# 以test的company列和bsr的market列为匹配键,左连接保留test所有行 test = test.merge(bsr, left_on='company', right_on='market', how='left') # 不需要market列的话可以删掉 test = test.drop('market', axis=1)
how='left'能保证test里的所有公司都被保留,要是在bsr里找不到匹配的区域,对应的region会显示为NaN。
方法二:列表推导式(你最初尝试的写法)
如果一定要用列表推导,先把bsr转成键值映射会更高效:
# 生成market到region的映射字典 market_region_map = bsr.set_index('market')['region'].to_dict() # 用列表推导生成region列 test['region'] = [market_region_map.get(company, None) for company in test['company']]
get(company, None)的意思是,要是公司名在映射里找不到,就返回None,你也可以换成'未知'这类自定义默认值。
内容的提问来源于stack exchange,提问作者Soumya Pandey
相关产品推荐
相关产品推荐

