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

如何优化多DataFrame的CUSIP匹配代码以更具Pythonic风格?

优化多Broker价格列合并的Pythonic写法

方案一:循环遍历Broker键(简洁直观)

直接筛选字典中所有以Broker开头的键,批量完成映射操作,彻底避免重复代码:

# 提取所有Broker相关的键,排除Summary
broker_keys = [key for key in x1 if key.startswith('Broker')]

for broker in broker_keys:
    # 把当前Broker的Price映射到Summary对应列
    x1['Summary'][broker] = x1['Summary']['CUSIP'].map(x1[broker].set_index('CUSIP')['Price'])

方案二:字典推导式+DataFrame.join(高效优雅)

通过字典推导式构建一个以CUSIP为索引、各Broker价格为列的映射表,再与Summary做左连接,是最符合Pythonic风格的写法:

import pandas as pd

# 构建各Broker价格的统一映射表
broker_price_map = pd.DataFrame({
    broker: x1[broker].set_index('CUSIP')['Price']
    for broker in [key for key in x1 if key.startswith('Broker')]
})

# 一次性将所有Broker价格列合并到Summary中
x1['Summary'] = x1['Summary'].join(broker_price_map, on='CUSIP')

方案三:批量合并后关联(适配复杂预处理)

如果需要对Broker数据做额外清洗或转换,可以先批量处理所有Broker的DataFrame,再与Summary关联:

import pandas as pd

# 批量处理Broker数据,将Price列重命名为Broker名称
broker_dfs = [
    x1[broker][['CUSIP', 'Price']].rename(columns={'Price': broker})
    for broker in [key for key in x1 if key.startswith('Broker')]
]

# 按CUSIP合并所有Broker的数据
merged_brokers = pd.merge(broker_dfs[0], broker_dfs[1:], on='CUSIP', how='outer')

# 与Summary左连接,添加所有价格列
x1['Summary'] = x1['Summary'].merge(merged_brokers, on='CUSIP', how='left')

其中方案二的字典推导式+join写法最简洁高效,适合绝大多数场景,能轻松应对40个甚至更多Broker的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:16:15