【发布时间】:2019-02-22 01:40:30
【问题描述】:
假设我有这个数据集:
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 和 min_periods=1,NA 不计算在内)我想要以下内容:
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 做到这一点?
举个简单的例子,例如,我希望国家 1 在 03/01/2018 的日期是对该国家/地区的所有公司在 2018 年 2 月 1 日的价值取平均值,并且03/01/2018(在窗口大小为 2 的情况下)。
因此,这就是我想在 2018 年 3 月 1 日为国家 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 的移动平均线,所以最好提供一个对任何自定义函数都有效的解决方案。
【问题讨论】:
-
查看组合
DataFrame.rolling和apply -
@Yuca,我知道伙计,但我想要确切的解决方案......
-
既然我不提供,那意味着我没有时间真正写下来,但至少我可以把你推向正确的方向
-
@Yuca,我很感激,但显然我知道组合 DataFrame.rolling 和应用。
-
这不是移动平均线,使用 min_period 1 您在第一个期间没有任何价值