基本上,我有一个较小的今年购买的资产表和一个公司持有的资产表。我希望能够从公司持有的资产表中获得某些符号的值,并合并到购买的资产数据集中。我想使用CUSIP。如果今年购买的资产中有一个CUSIP为空,则此代码可以返回空白或NaN。如果Holdings数据集中有重复的CUSIPS,则返回第一个值。我已经尝试了4种不同的方法来合并这些表,现在没有太多的运气。由于某些原因,我遇到了内存错误
对应的excel代码为:
=IFNA(INDEX(asset_holdings!ADMIN_SYMBOLS,MATCH(asset_purchases!CUSIP_n, asset_holdings!CUSIPs, 0)),"")
Holdings表
让我详细说明一下这个问题,以便您可以回顾一下我对您的问题的理解是否正确。您想要对购买数据集和持有数据集进行左外连接。但是,由于持有数据集有CUSIP id的副本,因此它将不是一对一连接。现在您有两个选项:
- 为购买数据集的一行接受多行
- 使CUSIP id在Holdings数据集中唯一,然后执行合并
第一方式:
import pandas as pd
left = pd.read_csv('purchase.csv')
right = pd.read_csv('holdings.csv')
result = pd.merge(left, right, on="CUSIP", how='left')
print(result)
但是,根据你的问题,上面的结果是不可接受的,所以,我们将使CUSIP列在正确的数据集中唯一。
import pandas as pd
left = pd.read_csv('purchase.csv')
right = pd.read_csv('holdings.csv')
# By default it takes first but i have added explicitly for better understanding
right_unique = right.drop_duplicates('CUSIP', keep='first')
result = pd.merge(left, right_unique, on="CUSIP", how='left', validate="many_to_one")
print(result)
好处:您还可以通过将其放入第一个版本来探索验证参数,并查看验证错误。