簡體   English   中英

獲取pandas中每個月的最后一個非NaN值

[英]Get last non-NaN value for each month in pandas

我有一個表單的DataFrame

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(<add good thing here>).resample('M').last()

  • last_valid_indexresample('M')

使用groupbylast

# 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
...

使用resample

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

使用df.dropna(how='all')將刪除所有值都是NaN每一行,並且將在那里獲得大部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM