通过groupby忽略NaN获取线条Pandas

时间:2017-08-16 16:16:20

标签: python pandas

我需要在我的数据帧中获取行(使用.last_valid_index()),但满足条件的一些索引是NaN(这很好,因为我可能在{{之间有一些空块) 1}})。

cuts

我需要摆脱NaNs,我尝试过类似的东西:

df.groupby('cuts').apply(lambda x: x.q1.last_valid_index())
Out[289]: 
cuts
(2016-04-29 23:59:59.999999999, 2016-05-14]     13.0
(2016-05-14, 2016-05-28]                        19.0
(2016-05-28, 2016-06-11]                         NaN
(2016-06-11, 2016-06-25]                         NaN
(2016-06-25, 2016-07-09]                         NaN
(2016-07-09, 2016-07-23]                        75.0
(2016-07-23, 2016-08-06]                         NaN
(2016-08-06, 2016-08-20]                         NaN
(2016-08-20, 2016-09-03]                         NaN
(2016-09-03, 2016-09-17]                       138.0
(2016-09-17, 2016-10-01]                         NaN
(2016-10-01, 2016-10-15]                       156.0
(2016-10-15, 2016-10-29]                         NaN

但它不起作用。

我确信这应该很简单,但我很难找到一个简洁的解决方案。

修改

df.groupby('cuts').apply(lambda x: x.loc[x.q1.last_valid_index()] if (x.q1.last_valid_index() > 0)

我需要在df[:50] Out[305]: response_date q1 crp ferritin hb q2 plasma platelets transferrin q3 wcc value a1 a2 a3 a4 0 2016-04-27 34.0 6.1 15.3 136.0 NaN 1.0 404.0 27.0 NaN 9.33 NaN NaN NaN NaN NaN 1 2016-04-30 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 12.0 0.98 80.0 1.0 2 2016-05-01 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1089.0 NaN NaN NaN NaN 3 2016-05-02 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 4 2016-05-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 5 2016-05-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 6 2016-05-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 7 2016-05-06 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 8 2016-05-07 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 9 2016-05-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 10 2016-05-09 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 11 2016-05-10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 12 2016-05-11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 13 2016-05-12 38.0 1.1 11.1 135.0 4.0 1.0 382.0 18.0 5.0 10.60 NaN NaN NaN NaN NaN 14 2016-05-13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 15 2016-05-14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 12.0 0.83 80.0 1.0 16 2016-05-15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 17 2016-05-16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 18 2016-05-17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 19 2016-05-18 36.0 8.8 15.6 138.0 NaN NaN 369.0 23.0 NaN 9.78 NaN NaN NaN NaN NaN 20 2016-05-19 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 21 2016-05-20 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 22 2016-05-21 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 23 2016-05-22 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 24 2016-05-23 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 25 2016-05-24 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 26 2016-05-25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 27 2016-05-26 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 28 2016-05-27 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 29 2016-05-28 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 14.0 1.60 80.0 1.0 30 2016-05-29 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 31 2016-05-30 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 32 2016-05-31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 33 2016-06-01 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 34 2016-06-02 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 802.0 NaN NaN NaN NaN 35 2016-06-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 36 2016-06-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 37 2016-06-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 38 2016-06-06 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 39 2016-06-07 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40 2016-06-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 41 2016-06-09 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 42 2016-06-10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 43 2016-06-11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 13.0 1.40 75.0 1.0 44 2016-06-12 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 45 2016-06-13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 46 2016-06-14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 47 2016-06-15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 48 2016-06-16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 49 2016-06-17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 的日期之间提取数据(血液结果)。我使用a1来获取pd.cut日期之间的区块。如果您注意到,在a1的某个区块中,没有血液结果,那么这就是我之前获得a1的方式。我需要在NaN的日期之间只获得带血的行。但是,日期之间可能有不止一组血液,所以这就是我采用最后一组结果的原因,它接近a1区块的末尾。

0 个答案:

没有答案