我有一个数据集,其中包含多个不同长度的缺失序列,我想在其中找到某些特定日期在这些序列之前和之后出现的第一个有效数字。在下面的示例数据集中,我想找到ColumnB最接近日期 的有效数字2018-11-26。数据样本:Date ColumnA ColumnB2018-11-19 107.00 NaN2018-11-20 104.00 NaN2018-11-21 106.00 NaN2018-11-22 105.24 80.002018-11-23 104.63 NaN2018-11-26 104.62 NaN2018-11-28 104.54 NaN2018-11-29 103.91 86.882018-11-30 103.43 NaN2018-12-01 106.13 NaN2018-12-02 110.83 NaN预期输出:[80, 86.88]一些细节:如果这个特定序列是唯一一个有缺失值的序列,我将能够使用For Loops,或熊猫函数first_valid_index()或isnull()如熊猫中所述 - 在列中找到第一个非空值来解决它,但这很少是这样。我可以使用一些来解决这个问题For Loops,但是对于较大的数据集来说它很慢而且不是很优雅,所以我真的很想听听其他建议!
3 回答

慕尼黑8549860
TA贡献1818条经验 获得超11个赞
试试这个方法,获取索引和切片,得到第一个有效数字
idx= np.where(df['Date']=='2018-11-26')[0][0]
# idx 3
num = (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
TA贡献1876条经验 获得超7个赞
我会这样尝试:
import pandas as pd
import numpy as np
df_vld = df.dropna()
idx = np.argmin(abs(df_vld.index - pd.datetime(2018, 11,26)))
# 1
df_vld.loc[df_vld.index[idx]]
Out:
ColumnA 103.91
ColumnB 86.88
Name: 2018-11-29 00:00:00, dtype: float64
添加回答
举报
0/150
提交
取消