Pandas groupby rolling mean,但只针对最近的行以节省计算时间

Pandas groupby rolling mean, but only for the most recent row to save calculation time

我有一个非常大的数据框,格式如下:

id     time     price
ABC    01:04     100
XYZ    01:04      50
QRS    01:04      25
ABC    01:03     100
XYZ    01:03      50
QRS    01:03      25
ABC    01:02     100
XYZ    01:02      50
QRS    01:02      25
ABC    01:01     100
XYZ    01:01      50
QRS    01:01      25
ABC    01:00     100
XYZ    01:00      50
QRS    01:00      25

在这种情况下,1:04pm 是最新数据,我想要每个代码的滚动平均价格,回溯 4 个周期。我不关心从 1:03pm 或 1:02pm 或 1:01pm.

开始的滚动平均值

到目前为止,我有这段代码可以处理所有事情,除了计算所有时间段的均值,而不仅仅是最近的一个:

rmean = db.groupby('id').rolling(window=3).mean()

之所以只需要第一个时间段计算,是因为我的实际数据量很大,时间太长。

预期输出:

id     time     price
ABC    01:04     100
XYZ    01:04      50
QRS    01:04      25

您可以使用 .groupby.agg 来计算最新数据的滚动平均值,您可以使用 head(3) 并计算它的平均值。

使用:

new_df = (df.sort_values(by=['time'], ascending = False)
            .groupby('id', as_index = False)
            .agg(
              time = ('time', 'first'), 
              price = ('price', lambda x: x.head(3).values.mean())
             ))

打印:

>>> new_df
    id   time  price
0  ABC  01:04    100
1  QRS  01:04     25
2  XYZ  01:04     50