Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/pandas/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dataframe 如何将公式应用于数据帧分组_Dataframe_Pandas - Fatal编程技术网

Dataframe 如何将公式应用于数据帧分组

Dataframe 如何将公式应用于数据帧分组,dataframe,pandas,Dataframe,Pandas,这是一天中我用头敲击键盘太久的时候,如果有任何建议,我将不胜感激。我的总体目标是接收一个每小时温度的数据文件,其中有间隙。我想用一个线性回归来填补这些空白,从附近的一个地点来计算温度。但我想按年按月完成。因此,在这里的人们的帮助下,我已经能够做到这一点。 现在我已经应用了一个线性回归函数,按年份和月份分类 Corr_grouped=DF_grouped.apply(lambda x: stats.linregress(x [Labels[0]], x [Labels[3]])) 这产生了以下输

这是一天中我用头敲击键盘太久的时候,如果有任何建议,我将不胜感激。我的总体目标是接收一个每小时温度的数据文件,其中有间隙。我想用一个线性回归来填补这些空白,从附近的一个地点来计算温度。但我想按年按月完成。因此,在这里的人们的帮助下,我已经能够做到这一点。 现在我已经应用了一个线性回归函数,按年份和月份分类

Corr_grouped=DF_grouped.apply(lambda x: stats.linregress(x [Labels[0]], x [Labels[3]]))
这产生了以下输出:斜率、截距、r_值、p_值、标准误差,并显示如下

> 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中有一个新的列,使用第3列作为输入,将线性回归y=mx+c应用于原始数据中的每一行,但要使用每年和每月不同的特定系数(斜率、截距)。任何最受欢迎的想法:) 干杯 杰森

编辑: 伟大的所以DF看起来像这样。多年来,它每30分钟就有一次时间戳。其间隙(NaN)可能为1个或多个间隔。我需要使用与附近站点(附近站点)的关系来填补原始列(原始)中的空白。但这不是一个简单的替代。现场通常距离较远,温度相关但不相同(即温度可能比现场高2摄氏度)。因此,必须首先调整车站附近的T_,然后用它来填补缺口

                        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_和附近T_之间的线性回归拟合。这将给出上面具有线性回归参数的分组对象。例如,2010年和第1个月,截距为5.75,斜率为0.806

因此,我想将这种关系应用到2010年和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_调整列来填充T_原件中的空白。 谢谢
Jason

您的第一步是将分组对象与DF合并。为此,首先创建一个公共分组列

对于分组对象:

from datetime import date
grouped['common'] = grouped.index.map(lambda x : date(x[0],x[1],1))
对于DF:

DF['common'] = DF.index.map(lambda x : date(x.year,x.month,1))
现在您可以合并它:

merged = DF.merge(grouped)
del merged['common']
我不确定计算T_调整列的确切公式是什么,但现在回归参数与T_附近的值匹配,可以通过数组操作计算出来

要使用调整的T_填充T_原件中的间隙,请执行以下操作:

merged['T_original']=merged['T_original'].combine_first(merged['T_adjusted'])

我不认为(对我来说)你的要求是完全清楚的,也许提供一个DF示例以及你希望它是什么会有所帮助?也许你想要一个
apply
,它指的是
Corr\u grouped
(?)谢谢我刚刚编辑了这篇文章,让它更清晰,并给出了一个例子