基于cusip_id合并千万级DataFrame:从其他DataFrame添加列的需求
合并两个DataFrame的解决方案
针对你这个需求,用pandas的合并功能就能轻松搞定,而且考虑到你有2000万行的大数据量,咱们得选对方式保证效率。
基础合并方法
最直接的就是用pd.merge(),指定连接键和连接方式就行:
import pandas as pd # 假设你已经加载好了Output_I和Output_II两个DataFrame Output_III = pd.merge(Output_I, Output_II, on='cusip_id', how='left')
on='cusip_id':明确以cusip_id作为匹配的键how='left':采用左连接,这样能保留Output_I里的所有行——哪怕某个cusip_id在Output_II里找不到对应数据,也会保留该行,ISIN字段会填充为NaN。如果能确定Output_I里的所有cusip_id都在Output_II里存在,换成how='inner'会更高效一点。
针对大数据量的优化建议
因为你的Output_I有2000万行,小细节能提升不少性能:
- 统一字段类型:先确保两个DataFrame的
cusip_id都是字符串类型,避免类型不匹配导致的连接慢或者失败:Output_I['cusip_id'] = Output_I['cusip_id'].astype(str) Output_II['cusip_id'] = Output_II['cusip_id'].astype(str) - 利用索引加速:Output_II是小表,给它的
cusip_id设置索引后,用join方法连接会比普通merge更快:# 给小表设置索引 Output_II.set_index('cusip_id', inplace=True) # 通过join连接 Output_III = Output_I.join(Output_II, on='cusip_id')
最终结果示例
合并后的Output_III结构会是这样:
| cusip_id | price | ISIN |
|---|---|---|
| uidiso | 100.5 | xs987346325 |
| undnns | 90.2 | ch438763282 |
| xsodeid | 45.5 | xs937349494 |
| uidiso | 99.5 | xs987346325 |
| xsodeid | 45.1 | xs937349494 |
| undnns | 90.0 | ch438763282 |
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

