我承认这是一个非常具体的例子。我有两个框架:第一个有一个日期和组:
Date Group
06/11/2023 A
05/11/2023 B
04/11/2023 A
03/11/2023 A
02/11/2023 B
字符串
第二个包含日期、组和值:
Date Group Value
06/11/2023 A 5
05/11/2023 B 8
04/11/2023 A 12
03/11/2023 A 4
02/11/2023 B 9
02/11/2023 B 0
01/11/2023 A 6
01/11/2023 B 10
型
我希望在第一个数组中创建一个额外的列,它只查看该组值的向后平均值,但 * 在有问题的日期之前 *。
所以
- 查看第一个表的第一行,2023年6月11日的A组:所得平均值将是A组所有先前日期的值的所有平均值:即12,4,6 = 7.33。
- 看看第一个表的第2行,2023年5月11日的B组,我们有9,0,10 = 6.33
我的结果表看起来像这样:
Date Group AvgGroupValue_PriorDate
06/11/2023 A 7.33
05/11/2023 B 6.33
04/11/2023 A 5
03/11/2023 A 6
02/11/2023 B 10
型
我可以看到这将是一个合并计算,但我很难理解如何做“平均之前的日期按组”元素。
3条答案
按热度按时间wpx232ag1#
您的输出不正确(04/11/2023,A,3.33)。该值应为5.00(=[4+6]/2)。
验证码:
字符串
输出:
型
bvjveswy2#
我认为有两种选择。第一种选择,是循环遍历df1的行并手动计算。如:
字符串
这是最基本的(但绝对是最慢的)选项,因为有
apply
循环。第二个选项是交叉连接两个表(仅在组上连接),过滤行,然后计算平均值。型
这些小 Dataframe 的执行时间没有显著差异。但是您应该在数据和环境中尝试这两种选项。由于第一种较慢,第二种需要更多内存。这取决于您的需求。
tvokkenx3#
一个有效的合并方法是使用
janitor
的conditional_join
来合并值,然后groupby.mean
:字符串
输出量:
型