首页 > 解决方案 > 按时间序列过滤每组最新的 x % 并计算聚合

问题描述

过滤每个组的时间序列的最佳方法是什么,获取最近测量的 x%,然后计算整个过滤数据集的多个聚合?我目前正在使用以下代码,但这是正确的还是有更好的方法来实现这个目标?

fraction = 0.7

def df_by_ts_head_fraction(df):
    end_idx = math.ceil(len(df) * fraction)
    return df.sort_values(by='timestamp', ascending=False).iloc[:end_idx]

data = [[datetime.fromisoformat('2020-08-28 08:00'), 55.66, 'a']]
df = pd.DataFrame(data, columns=['timestamp', 'measurement', 'group'])

df = df.groupby('group').\
    apply(df_by_ts_head_fraction).\
    aggregate(['mean', 'median', 'size'])

标签: pythonpandas

解决方案


以下似乎实现了既定目标

df = df.groupby('timestamp').\
    apply(df_by_ts_head_fraction).\
    reset_index(drop=True).\
    loc[:, ['timestamp', 'measurement']].\
    groupby('timestamp').\
    aggregate(['mean', 'median', 'size'])

推荐阅读