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
我有一个非常大的数据框,格式如下:
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