【发布时间】:2013-01-27 12:49:11
【问题描述】:
一天中的那个时候,我的头敲击键盘太久了,我会很感激任何建议。我的总体目标是摄取一个每小时温度的数据文件,其中有间隙。我想使用来自附近站点的温度线性回归来填补这些空白。但我想按年和按月执行此操作。因此,在这里的人们的帮助下,我已经能够做到这一点。 现在我已经应用了一个线性回归函数 BY YEAR AND MONTH 像
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中的空白。 谢谢 杰森
【问题讨论】:
-
我认为(对我而言)您的要求并不完全清楚,也许提供一个示例 DF 以及您希望它是什么会有所帮助?也许你想要一个
apply,它指的是Corr_grouped(?) -
谢谢我刚刚编辑了帖子以使其更清晰并举例说明