Python Pandas问题:索引/匹配缺失值+重复项+两者之间的所有内容



基本上,我有一个较小的今年购买的资产表和一个公司持有的资产表。我希望能够从公司持有的资产表中获得某些符号的值,并合并到购买的资产数据集中。我想使用CUSIP。如果今年购买的资产中有一个CUSIP为空,则此代码可以返回空白或NaN。如果Holdings数据集中有重复的CUSIPS,则返回第一个值。我已经尝试了4种不同的方法来合并这些表,现在没有太多的运气。由于某些原因,我遇到了内存错误

对应的excel代码为:

=IFNA(INDEX(asset_holdings!ADMIN_SYMBOLS,MATCH(asset_purchases!CUSIP_n, asset_holdings!CUSIPs, 0)),"")

Holdings表

<表类>CUSIP符号tbody><<tr>353187 ev5174727 pay7380413 taj8铁02765 ucr33 g0000000003 g td74727付3 e0000000004 e

让我详细说明一下这个问题,以便您可以回顾一下我对您的问题的理解是否正确。您想要对购买数据集和持有数据集进行左外连接。但是,由于持有数据集有CUSIP id的副本,因此它将不是一对一连接。现在您有两个选项:

  1. 为购买数据集的一行接受多行
  2. 使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)

好处:您还可以通过将其放入第一个版本来探索验证参数,并查看验证错误。

相关内容

  • 没有找到相关文章

最新更新