我試圖根據列中以前的數據實現單個空單元格的線性迴歸計算。由於我不明白如何使用python庫,所以我逐步編寫了整個計算。計算大熊貓列中單個單元格的線性迴歸問題
這是我的數據框:
index value delta
-52 0 42517
-51 0 42524
-50 216 42531
-49 345 42538
-48 237 42545
...
-2 367 42862
-1 310 42869
0 226 42876
1 NaN 42883
2 NaN 42890
...
49 NaN 43213
50 NaN 43220
51 NaN 43227
52 NaN 43234
值,其中index = 0
,下總是52
。以上,可能有不同的數字,但在本例中我們事先知道它們的52
。 未知的值總是從index = 1
開始。
對於單個值,我就指望這樣(在這裏,我計數值delta
列dd = 42883
):
x = dftest['delta']
y = dftest['value']
x_mean= np.mean(x)
y_mean = np.mean(y)
x_std = np.std(x)
y_std = np.std(y)
corr = np.corrcoef(y, x)[1,0]
slope = corr * y_std/x_std
intercept = y_mean - slope * x_mean
n_vl = intercept + slope * dd
所以他計算,但我不知道如何編寫一個循環,使他對所有空單元格(從index = 1
開始)執行此操作,同時考慮到之前計算的值。
我試圖使用第一個響應here中的代碼並對其進行更改,但它不起作用。
下面的代碼的一部分:
vl = dftest['value'].values
delta = dftest['delta'].values
for index in range(0, vl.shape[0]):
if np.isnan(vl[index]):
x = delta.take(range(index-52,index+1),mode='wrap')
y = vl.take(range(index-52,index+1),mode='wrap')
y1 = np.nanmean(vl.take(range(index-52,index+1),mode='wrap'))
y2 = np.nanstd(vl.take(range(index-52,index+1),mode='wrap'))
x1 = np.nanmean(delta.take(range(index-52,index+1),mode='wrap'))
x2 = np.nanstd(delta.take(range(index-52,index+1),mode='wrap'))
corr = np.corrcoef(y, x)[1,0]
slope = corr * y2/x2
intercept = y1 - slope * x1
n_vl = intercept + slope * dd
print (y)
print (x)
print (y1)
print (y2)
print (x1)
print (x2)
print (corr)
print (slope)
print (intercept)
print (n_vl)
但它需要的index = 0
低於值,而不是上面。我不知道如何改變這種情況,以及如何編寫它,以便計算每個空單元格。
這就是我在一個值的輸出(從我的代碼循環)得到的。
[ 226. nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan]
[42876 42883 42890 42897 42904 42911 42918 42925 42932 42939 42946 42953
42960 42967 42974 42981 42988 42995 43002 43009 43016 43023 43030 43037
43044 43051 43058 43065 43072 43079 43086 43093 43100 43107 43108 43115
43122 43129 43136 43143 43150 43157 43164 43171 43178 43185 43192 43199
43206 43213 43220 43227 43234]
226.0
0.0
43055.8490566
104.701263481
nan
nan
nan
nan
我一直堅持這個很長時間,不能前進,我真的需要幫助。
您是否試過使用dropna從數據集中簡單地刪除NaN? – FLab
你會如何精確計算'NaN'的平均值? 'x_mean = np.mean(x)'如果'x'總是空的,就沒有意義了。 – mkos