我有一个形式的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_index
与resample('M')
一起使用。
答案 0 :(得分:2)
使用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
...
答案 1 :(得分:2)
使用resample
df.resample('M').last()
Out[82]:
ACA_FP AC_FP AI_FP
eqt_code
2015-01-31 1.0 0.2 NaN
答案 2 :(得分:0)
使用df.dropna(how='all')
将删除所有值均为NaN
的每一行,并为您提供大部分帮助。