我有两个数据框。
第一个采用这种格式的人,我们称其为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。我对数据的完整性很有信心,源头不会丢失任何数据。
你知道这里发生了什么吗?
答案 0 :(得分:0)
您要用左联接在两列上联接,因此,如果NRSRO数据框在特定日期没有对银行A的评级,并且该日期出现在df
中,则在{{1}中将为空}数据框。要检查是否正在发生,请运行
result
如果此数据框中仍然有空值,则您的NRSRO数据框中可能还存在一些空值,因此您应该进行检查。如果此方法返回的是没有空值的理想数据帧,则我的上述推理是正确的,即缺少一些数据。