我有一個數據集,其中包含多個不同長度的缺失序列,我想在其中找到某些特定日期在這些序列之前和之后出現的第一個有效數字。在下面的示例數據集中,我想找到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
提交
取消