猿问

在熊猫数据框中的缺失值中查找最接近的有效数字

我有一个数据集,其中包含多个不同长度的缺失序列,我想在其中找到某些特定日期在这些序列之前和之后出现的第一个有效数字。在下面的示例数据集中,我想找到ColumnB最接近日期 的有效数字2018-11-26。


数据样本:


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,或熊猫函数first_valid_index()或isnull()如熊猫中所述 - 在列中找到第一个非空值来解决它,但这很少是这样。


我可以使用一些来解决这个问题For Loops,但是对于较大的数据集来说它很慢而且不是很优雅,所以我真的很想听听其他建议!


噜噜哒
浏览 138回答 3
3回答

慕尼黑8549860

试试这个方法,获取索引和切片,得到第一个有效数字idx= np.where(df['Date']=='2018-11-26')[0][0]# idx 3num = (df.loc[df.loc[:idx,'ColumnB'].first_valid_index(),'ColumnB'],       df.loc[df.loc[idx:,'ColumnB'].first_valid_index(),'ColumnB'])num(80.0, 86.879999999999995)

幕布斯6054654

我会这样尝试:import pandas as pdimport numpy as npdf_vld = df.dropna()idx = np.argmin(abs(df_vld.index - pd.datetime(2018, 11,26)))# 1df_vld.loc[df_vld.index[idx]]Out:ColumnA    103.91ColumnB     86.88Name: 2018-11-29 00:00:00, dtype: float64
随时随地看视频慕课网APP

相关分类

Python
我要回答