一天中的那个时候,我的头撞在键盘上太久了,我会很感激任何建议。我的总体目标是摄取一个每小时温度的数据文件,其中有间隙。我想使用来自附近站点的温度线性回归来填补这些空白。但我想按年和按月执行此操作。因此,在这里的人们的帮助下,我已经能够做到这一点。现在我已经按年和月应用了线性回归函数,例如
Corr_grouped=DF_grouped.apply(lambda x: stats.linregress(x [Labels[0]], x [Labels[3]]))
这产生了以下输出,输出斜率、截距、r_value、p_value、std_err 并显示如下。
> 2010 1 (0.806190897504, 5.75672188581, 0.901179913935...
> 2 (0.739906365408, 8.05204746237, 0.894050112908...
> 3 (0.773199101365, 6.88505178697, 0.898475211997... ...
> 10 (0.87497855294, 4.10227036556, 0.939948762031,...
> 11 (0.793072407801, 6.38604194806, 0.923659962858...
我整天都在阅读找不到确切的解决方案。现在我的问题是如何将其应用回原始数据框。我想要 DF 中的一个新列,将线性回归 y=mx+c 应用到原始数据中的每一行,使用第 3 列作为输入,但是使用不同的特定系数(斜率、截距)来做到这一点每年和每月。任何想法最受欢迎:) 干杯杰森
编辑:太好了。所以DF看起来像这样。多年来,它每 30 分钟有一个时间戳。它有可能是 1 个或多个间隔的间隙 (NaN)。我需要使用与附近车站 (T_nearby) 的关系来填补原始列 (T_original) 中的空白。但这不是简单的替代。该地点通常相距一段距离,并且温度是相关的,但并不相同(即一个可能比 2oC 高)。所以必须先调整 T_nearby 站,然后再使用它来填补空白。
T_original T_nearby
2010-01-01 00:00:00 25.87873 25.4
2010-01-01 00:30:00 25.73089 25.4
2010-01-01 01:00:00 25.56144 25.4
2010-01-01 01:30:00 NaN 25.4
2010-01-01 02:00:00 25.24789 25.6
2010-01-01 02:30:00 25.17758 25.4
2010-01-01 03:00:00 NaN 25.6
2010-01-01 03:30:00 NaN 25.6
2010-01-01 04:00:00 25.07633 25.6
2010-01-01 04:30:00 24.99211 25.5
我想按年和月细分分析。因此,对于每年的每个月计算 T_original 和 T_nearby 之间的线性回归拟合。这给出了上面具有线性回归参数的分组对象。例如 2010 年和第 1 个月,截距为 5.75,斜率为 0.806。
所以我想将这种关系应用到所有 Year=2010 和 Month=1 看起来像这样。然后对于 DF 的其余部分,每年的每个月都采用相同的方法。
T_original T_nearby T_adjusted
1/01/2010 0:00 25.87873 25.4 26.2224
1/01/2010 0:30 25.73089 25.4 26.2224
1/01/2010 1:00 25.56144 25.4 26.2224
1/01/2010 1:30 NaN 25.4 26.2224
1/01/2010 2:00 25.24789 25.6 26.3836
1/01/2010 2:30 25.17758 25.4 26.2224
1/01/2010 3:00 NaN 25.6 26.3836
1/01/2010 3:30 NaN 25.6 26.3836
1/01/2010 4:00 25.07633 25.6 26.3836
1/01/2010 4:30 24.99211 25.5 26.303
然后我将使用 T_adjusted 列来填补 T_original 中的空白。谢谢杰森