假设我有一个数据集:
Country_id Company_id Date Company_value
1 1 01/01/2018 1
1 1 02/01/2018 0
1 1 03/01/2018 2
1 1 04/01/2018 NA
1 2 01/01/2018 1
1 2 02/01/2018 2
1 2 03/01/2018 NA
1 2 04/01/2018 NA
2 1 01/01/2018 3
2 1 02/01/2018 0
2 1 03/01/2018 2
2 1 04/01/2018 NA
2 2 01/01/2018 1
2 2 02/01/2018 2
2 2 03/01/2018 NA
2 2 04/01/2018 NA
我想应用一个移动函数(例如移动平均)来检索每个日期和国家的聚合值。你知道吗
因此,例如在移动平均线的情况下(窗口=2,最小周期=1,NAs不计算在内),我希望有以下内容:
Country_id Date Companies_value
1 01/01/2018 1
1 02/01/2018 1
1 03/01/2018 1.33
1 04/01/2018 2
2 01/01/2018 2
2 02/01/2018 1.5
2 03/01/2018 1.33
2 04/01/2018 2
为了使您更方便,可按以下方式计算:
Country_id Date Companies_value
1 01/01/2018 (1+1)/2
1 02/01/2018 (0+1+2+1)/4
1 03/01/2018 (2+0+2)/3
1 04/01/2018 (2)/1
2 01/01/2018 (3+1)/2
2 02/01/2018 (0+3+2+1)/4
2 03/01/2018 (2+0+2)/3
2 04/01/2018 (2)/1
如何使用pandas
实现这一点?你知道吗
举一个简单的文字例子,例如,我想要在2018年1月3日对国家1进行的计算是取该国2018年1月2日和2018年1月3日所有公司价值的平均值(在窗口大小为2的情况下)。你知道吗
因此,我希望在2018年1月3日为1国完成以下工作:
( Company_value(Company_1, 03/01/2018) + Company_value(Company_1, 02/01/2018)
+ Company_value(Company_2, 03/01/2018) + Company_value(Company_2, 02/01/2018) ) / 4 =
= ( 2 + 0 + NA + 2) / 4
= ( 2 + 0 + 2) / 3 # NAs not counted in
= 1.33
类似地,我想对每个国家的所有日期都这样做。你知道吗
正如我所说的,我想对我自己的移动函数做同样的处理,使其超出移动平均数pandas
,因此提供一个对任何自定义函数都有效的解决方案是很好的。你知道吗
您可以通过以下方式获得想要的结果:
更新附加信息
数据:
在
country_id
内创建滚动求和在
country_id
内创建滚动计数现在groupby在
country_id
和date
内,求和,除以计数和让我们更详细地看一下。因为我们是按国家/地区id分组的,所以我们将对单个国家/地区id进行子集划分,以便在以下方面实践此方法:
如果我们只取其中一块,就说
country_id == 1
:如果我们想要这一次的滚动平均数,我们可以做:
我们可以在这里看到,我们的子集country_id==1数据帧的值以及它们与滚动平均值的关系:
这就是我们如何得到一组
country_id
的滚动平均数如果我们想按日期进行分组,我们首先按国家/地区id进行分组,然后按日期进行分组,则单个组将如下所示:
这里的问题是,您希望滚动平均值首先按
country_id
,而不是按date
分组。然后,在找到按国家划分的滚动平均值后,您需要取这些值并平均它们。如果我们取滚动平均值,然后取这些平均值,结果就不正确了。你知道吗那么让我们回到我们为
country_id == 1
创建的原始滚动平均值,看看日期:现在比较棘手的是,在这一点上,我们不能把它们平均在一起,因为例如,如果你看2018-03-01滚动平均值,我们有1和2,也就是3。除以2等于1.5。你知道吗
我们必须首先对滚动值求和,然后除以记录数。你知道吗
相关问题 更多 >
编程相关推荐