使用合并功能将信息从一个数据帧合并到另一数据帧时发生错误

时间:2019-05-15 15:53:53

标签: python pandas dataframe merge

我有两个数据框。

第一个采用这种格式的人,我们称其为df

Date  Counterparty Amount
3/1   Bank A       $100
3/1   Bank B       $100 
3/1   Bank C       $100
...
3/30  Bank B       $100
3/30  Bank C       $150
3/30  Bank D       $300
3/30  Bank E       $250

第二个以这种格式提供每个银行的评级信息。 我们称之为NRSRO

Date  Bank A   Bank B   Bank C   Bank D   Bank E   Bank F ....Bank Z
3/1   AA      ...
3/2   AA      ...
3/3   AA      ...

我尝试了以下代码

NRSRO= pd.DataFrame(NRSRO.stack(), columns=['Rating']).reset_index()
NRSRO= NRSRO.rename(columns = {'level_1':'Counterparty'})

这会将NRSRO数据帧转换为:

Date  Counterparty Rating
3/1   Bank A       AA
3/2   Bank A       AA
...
3/30  Bank A       AA
3/1   Bank B       AAA
3/2   Bank B       AAA
...
...
3/30  Bank Z       AAA

最后,使用合并到数据框

result = pd.merge(df, NRSRO, how = 'left', on = ['Date', 'Counterparty'])

我得到的结果参差不齐。

运行此命令时,返回为true。

result['Rating'].isnull().values.any()

对于某些银行,我已将评级数据成功地附加到“结果”数据框中,但对于其他银行,它显示了NaN。我对数据的完整性很有信心,源头不会丢失任何数据。

你知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

您要用左联接在两列上联接,因此,如果NRSRO数据框在特定日期没有对银行A的评级,并且该日期出现在df中,则在{{1}中将为空}数据框。要检查是否正在发生,请运行

result

如果此数据框中仍然有空值,则您的NRSRO数据框中可能还存在一些空值,因此您应该进行检查。如果此方法返回的是没有空值的理想数据帧,则我的上述推理是正确的,即缺少一些数据。