Python 获取熊猫中每个月的最后一个非NaN值

Python 获取熊猫中每个月的最后一个非NaN值,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,我有一个数据框的形式 eqt_code ACA_FP AC_FP AI_FP BDATE 2015-01-01 NaN NaN NaN 2015-01-02 NaN NaN NaN 2015-01-05 1 NaN NaN 2015-01-06 NaN NaN NaN 2015-01-07 NaN NaN NaN 2015-01-

我有一个数据框的形式

eqt_code    ACA_FP  AC_FP  AI_FP
BDATE                           
2015-01-01     NaN    NaN    NaN
2015-01-02     NaN    NaN    NaN
2015-01-05       1    NaN    NaN
2015-01-06     NaN    NaN    NaN
2015-01-07     NaN    NaN    NaN
2015-01-08     NaN    0.2    NaN
2015-01-09     NaN    NaN    NaN
2015-01-12       5    NaN    NaN
2015-01-13     NaN    NaN    NaN
2015-01-14     NaN    NaN    NaN
2015-01-15     NaN    NaN    NaN
我希望每个月都能得到每列的最后一个非NaN值(如果没有有效值,则为NaN)。因此导致类似于

eqt_code    ACA_FP  AC_FP  AI_FP
BDATE                           
2015-01-31       5    0.2    NaN
2015-02-28      10      1      3
2015-03-31     NaN    NaN      3
2015-04-30      10      1      3
我有两个想法来实现这一点:

  • 做一个
    ffill
    ,限制到月底。类似于
    df.ffill().resample('M').last()

  • 使用
    last\u valid\u index
    resample('M')


    • 使用
      groupby
      last

      # Do this if the index isn't a DatetimeIndex.
      # df.index = pd.to_datetime(df.index)
      df.groupby(df.index + pd.offsets.MonthEnd(0)).last()
      
                  ACA_FP  AC_FP  AI_FP
      BDATE                           
      2015-01-31     5.0    0.2    NaN
      ...
      

      使用
      df.dropna(how='all')
      将删除所有值均为
      NaN
      的每一行,并将为您提供大部分方法

      使用
      重采样

      df.resample('M').last()
      Out[82]: 
                  ACA_FP  AC_FP  AI_FP
      eqt_code                        
      2015-01-31     1.0    0.2    NaN
      

      我想你需要
      最后一个
      !工作得很有魅力。谢谢!