【发布时间】:2021-09-26 16:53:53
【问题描述】:
我正在尝试计算按日期分组的扩展窗口平均值。 例如,
df_example = pd.DataFrame({
'group' : ['a','a','b','b','a','a','b','a','b'],
'date': ['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02','2021-01-02','2021-01-03','2021-01-04'],
'val' : [True, True, False, True, False, False, True, True,False]
})
group date val
0 a 2021-01-01 True
1 a 2021-01-01 True
2 b 2021-01-01 False
3 b 2021-01-01 True
4 a 2021-01-02 False
5 a 2021-01-02 False
6 b 2021-01-02 True
7 a 2021-01-03 True
8 b 2021-01-04 False
为此,我正在寻找的逻辑是:对于每个组和日期,计算小于或等于该日期的所有值的平均值。我已设法按以下方式做到这一点,但正在寻找一种更清洁、更有效的方法来处理它。
df1 = df_example.groupby(['group','date']).sum().groupby('group').cumsum()
df2 = df_example.groupby(['group','date']).count().groupby('group').cumsum()
df_result = df1 / df2
val
group date
a 2021-01-01 1.000000
2021-01-02 0.500000
2021-01-03 0.600000
b 2021-01-01 0.500000
2021-01-02 0.666667
2021-01-04 0.500000
除此之外,我还想扩展数据框,以便在各组中一致地观察每个日期,使用回顾,例如如果没有观察到日期,则使用之前的最新值。
val
group date
a 2021-01-01 1.000000
2021-01-02 0.500000
2021-01-03 0.600000
2021-01-04 0.600000
b 2021-01-01 0.500000
2021-01-02 0.666667
2021-01-03 0.666667
2021-01-04 0.500000
最好以更高效且更易读的方式完成此操作,因为我希望对多个组和值执行类似的逻辑和计算。
【问题讨论】: