首页 > 解决方案 > 比 pandas groupby 更有效的方法

问题描述

在下面的代码中,目标是,对于由 定义的每个组ID,只保留DAYS从第一条记录开始出现的记录ID(输入数据按ID和排序TIME)。

我想知道这是否是一个好方法,或者是否有更有效的方法来解决这个任务。我注意到这对于大量数据来说非常慢。

df[df.groupby('ID').TIME.apply(lambda x: x.diff().dt.days.cumsum().fillna(0).abs())<=DAYS]

请注意,我不指望有人能解决我的问题。我只想讨论是否有比df.groupby().

编辑
一些示例数据:

DAYS = 4

df = pd.DataFrame({
    'ID': ['a', 'a', 'a', 'b', 'b', 'b'],
    'TIME': [
        np.datetime64('2020-01-01'),
        np.datetime64('2020-01-02'),
        np.datetime64('2020-01-09'),
        np.datetime64('2020-01-04'),
        np.datetime64('2020-01-06'),
        np.datetime64('2020-01-20')
    ]
})

df = df.sort_values(by=['ID', 'TIME'], ascending=True)

标签: pythonpandasdataframepandas-groupby

解决方案


尝试这个:

df[df['TIME'] - df['ID'].map(df.groupby('ID').TIME.first()) > pd.Timedelta(days=DAYS)]

推荐阅读