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