Python 计算大熊猫列中单个细胞线性回归的问题

Python 计算大熊猫列中单个细胞线性回归的问题,python,pandas,Python,Pandas,我试图根据列中以前的数据为单个空单元格实现线性回归计算。因为我不知道如何使用python库,所以我分步骤编写了整个计算 这是我的数据帧: index value delta -52 0 42517 -51 0 42524 -50 216 42531 -49 345 42538 -48 237 42545 ... -2 367 42862 -1 310

我试图根据列中以前的数据为单个空单元格实现线性回归计算。因为我不知道如何使用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
)中的值:

所以他计算,但我不知道如何编写循环,所以他对所有空单元格(从
index=1
开始)都这样做,同时考虑到之前计算的值

我试图使用第一个响应中的代码并对其进行更改,但它不起作用

代码的以下部分:

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)
但它的值低于
索引=0
,而不是高于。我不知道如何更改它,以及如何写入它,以便它对每个空单元格都计数

这就是我在一个值的输出中得到的结果(来自我带循环的代码)

我在这个问题上纠缠了很长时间,无法前进,我真的需要帮助。

就这样做吧

dftest['value'].fillna(52)
这将用编号
52
填充
value
列中的所有
NaN
。 如果您需要额外确保只在
索引时填写
NaN

dftest['value'].fillna(52)
这将用编号
52
填充
value
列中的所有
NaN

如果您需要额外确保只在
索引时填写
NaN
,那么我决定使用基于已知数据的线性回归来填充列中的空单元格

import statsmodels.formula.api as smf
#Here I choose the known data and fit the model
smresults = smf.ols('value ~ delta', df.iloc[:53]).fit()
smresults.summary()
#Here I fill empty cells using the model
df.value[53:] = smresults.predict(df.iloc[53:])

这是我得到的最佳解决方案。

因此,我决定使用基于已知数据的线性回归来填充列中的空单元格

import statsmodels.formula.api as smf
#Here I choose the known data and fit the model
smresults = smf.ols('value ~ delta', df.iloc[:53]).fit()
smresults.summary()
#Here I fill empty cells using the model
df.value[53:] = smresults.predict(df.iloc[53:])

这是我设法得到的最佳解决方案。

您是否尝试过使用dropna从数据集中删除NaN?您如何准确地计算仅适用于
NaN
s的平均值
x_mean=np。如果
x
始终为空,则平均值(x)
没有意义。您是否尝试过使用dropna从数据集中删除NaN?您将如何准确计算
NaN
s的平均值
x_mean=np。如果
x
始终为空,则均值(x)
没有意义。
import statsmodels.formula.api as smf
#Here I choose the known data and fit the model
smresults = smf.ols('value ~ delta', df.iloc[:53]).fit()
smresults.summary()
#Here I fill empty cells using the model
df.value[53:] = smresults.predict(df.iloc[53:])