【发布时间】:2018-12-11 22:40:28
【问题描述】:
我有一个数据集,其中包含多个不同长度的缺失序列,我想在其中找到在某些特定日期在这些序列之前和之后出现的第一个有效数字。在下面的示例数据集中,我想找到最接近日期2018-11-26 的ColumnB 的有效数字。
数据样本:
Date ColumnA ColumnB
2018-11-19 107.00 NaN
2018-11-20 104.00 NaN
2018-11-21 106.00 NaN
2018-11-22 105.24 80.00
2018-11-23 104.63 NaN
2018-11-26 104.62 NaN
2018-11-28 104.54 NaN
2018-11-29 103.91 86.88
2018-11-30 103.43 NaN
2018-12-01 106.13 NaN
2018-12-02 110.83 NaN
预期输出:
[80, 86.88]
一些细节:
如果这个特定序列是唯一一个缺失值的序列,我可以使用For Loops 或Pandas - find first non-null value in column 中所述的pandas 函数first_valid_index() 或isnull() 来解决它,但这种情况很少发生。
我可以使用几个For Loops 来解决这个问题,但是对于较大的数据集来说速度很慢而且不是很优雅,所以我真的很想听听其他建议!
【问题讨论】:
-
2018-11-16 的收盘价是 80.00 为什么会得到第二个值?哦。我想你是 2018-11-26 的?
-
@ScottBoston 你完全正确!我已经编辑了问题。
-
如果你想根据
Date找到最接近的非空数,那么这实际上只是一个插值问题:df.set_index('Date').ColumnB.interpolate('nearest').ffill().bfill()。如果只是基于索引的插值,则不需要.set_index