python - 比 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)
解决方案
尝试这个:
df[df['TIME'] - df['ID'].map(df.groupby('ID').TIME.first()) > pd.Timedelta(days=DAYS)]
推荐阅读
- python - 如何在 pytest requests mock 中伪造我的回复
- javascript - plotly - 响应宽度,固定高度
- kubernetes - 如何管理基于微服务的应用程序的逻辑分组以确保 CI/CD 管道的版本兼容性?
- excel - 在隐藏和取消隐藏用户表单之间移动时出错
- python-3.x - 如何将数字列表排列成列和行
- elasticsearch - logstash 不会读取单行文件
- linux - 将 Windows Docker 主机中的 Linux 容器连接到外部网络
- android - android studio和sqlite计算重复值
- mysql - 在带有like运算符的sql查询中使用星号标记
- javascript - 用 JS 编码的 Html 的 Wordpress 交换 &&