首页 > 解决方案 > 检索具有多个条件的值 - 熊猫

问题描述

样品日期:

数据框 1

cusip_id trd_exctn_dt time_to_maturity
00077AA2 2015-05-09 1.20年
00077TBO 2015-05-06 3.08 年

数据框 2:

指数 SVENY01 SVENY02 SVENY03 SVENY04
2015-05-09 1.35467 1.23367 1.52467 1.89467
2015-05-08 1.65467 1.87967 1.43251 1.98765
2015-05-07 1.35467 1.76567 1.90271 1.43521
2015-05-06 1.34467 1.35417 1.67737 1.11167

期望的输出:

我想将 df1 中的“trd_exctn_dt”与 df2 索引中的日期完全匹配,同时将 df1 中的“time_to_maturity”与 df2 中最近的 SVENYXX 匹配(四舍五入,例如 1.20 年将相当于 SVENY02 )。例如,对于 cusip_id (00077AA2),trd_exctn_dt 为 2015-05-09,time_to_maturity 为 1.20 年。在这种情况下,我想在 SVENY02 列中获取日期为 2015-05-09 的 df2 中的相应值。

我想对几个 cusip_id 重复此操作,我将如何实现?任何帮助,将不胜感激!

标签: pythonpandasdataframemerge

解决方案


这是我的解决方案代码:

import pandas as pd

SVENYXX = []
for i in range(df1['cusip_id'].shape[0]):
    cusip_id = df1['cusip_id'][i]
    trd_exctn_date = df1['trd_exctn_dt'][i]
    maturity_time = df1['time_to_maturity'][i]
    
    svenyVals = df2.loc[trd_exctn_date]
    closestSvenyVal = svenyVals.iloc[(svenyVals-maturity_time).abs().argsort()[0]]
    
    SVENYXX.append(closestSvenyVal)

其中df1是 Dataframe 1,df2是 Dataframe 2,并且SVENYXX是与给定的所有 SVENYXX 值最接近的列表cusip_id

我遍历所有cusip_id的并获得对应的trd_exctn_dttime_to_maturity。然后使用提取的数据,我在 DataFrame 2 中找到相应的行,然后通过找到与svenyVals相比的最小差异time_to_maturity,我将该值附加到SVENYXX列表中。


推荐阅读