首页 > 解决方案 > 使用 get_loc 通过遍历 Pandas 中的数据框来获取多个值的索引

问题描述

Events是以日期为索引的 DataFrame。它看起来像这样:

           co_code
co_stkdate  
2009-03-17  11
2010-02-03  11
2011-02-14  363
2015-01-09  363
2010-10-15  365

residual是以日期为索引的另一个数据框,包含数据框 co_code 中的元素events作为列名。残差看起来像这样(有 700 多个列,但我发布了 3 个以供参考):

              11    363    365  
co_stkdate
1997-07-02  NaN -12.134525  NaN 
1997-07-04  NaN -3.663248   -15.703843 
1997-07-07  NaN -30.649876  3.400623
1997-07-08  NaN 17.924305   -6.188777
1997-07-10  NaN -25.828099  -0.615380 

我想比较两个数据框以分别查找数据框每一列的公共日期,并为residual数据框中具有匹配日期的每一列提取特定行及其相邻行events。由于数据集非常大,我想遍历残差的每一列以根据列名(与数据框匹配events)比较日期。因此,我尝试了以下代码:

carvalues = {}
for code in residual.columns:
  for c in events['co_code']:
    if (code == c):
      for elem in events['co_stkdate']:
        for dates in residual.index:
          if (elem == dates):
            if pd.notnull(residual.loc[dates, code]):
              idx=residual.index.get_loc(dates, code. method=None)
              carvalues = residual.iloc[idx - 10 : idx +10] 
     

但我不断收到以下错误:

TypeError: get_loc() got multiple values for argument 'method'

预期输出:例如,residual在日期 2009-03-17 的上方和下方提取 10 行(从数据框中),对应于 'co_code'=11(在数据框中给出events)。并期望日期 2009-03-17 的输出,对应于 'co_code'=11 为:

co_stkdate  11
2009-02-25  4.467442
2009-02-26  4.921655
2009-02-27  -4.875917
2009-03-02  1.895546
2009-03-03  -3.162370
2009-03-06  85.396542
2009-03-09  43.233098
2009-03-12  11.389193
2009-03-13  -68.633160
2009-03-16  0.329175
2009-03-17  -0.049623
2009-03-18  3.584602
2009-03-19  -3.602577
2009-03-20  -1.532591
2009-03-23  2.766331
2009-03-24  0.487590
2009-03-25  -3.541044
2009-03-26  -5.055355
2009-03-27  0.887624
2009-03-30  2.530087

同样,接下来我想要 & 的输出co_stkdate=2010-02-03co_code=11然后是co_stkdate=2011-02-14&的输出co_code=363,依此类推(如数据框中给出的events)。我怎样才能消除错误?任何有关执行此操作的最佳方法的指导将不胜感激。

标签: pythonpandasloopsdataframedata-science

解决方案


将第二个数据框从宽格式重塑为长格式并加入两个数据框,您将获得所需的结果


推荐阅读