python - 使用python根据日期条件删除行
问题描述
我有一个数据框,其中包含日期和 ID 列。以下是仅用于此问题的示例框架。但实际数据包括更多的行和列。
from datetime import date, timedelta
import pandas as pd
date = datetime.datetime(2020, 1, 1)
delta_1 = 5
delta_2 = 15
delta_3 = 18
data = {
'A': [date, date - timedelta(delta_1), date - timedelta(delta_2), date, date - timedelta(delta_3)],
'B': ['a', 'a', 'a', 'b', 'b']
}
df = pd.DataFrame(data)
print(df)
A B
0 2020-01-01 a
1 2019-12-27 a
2 2019-12-17 a
3 2020-01-01 b
4 2019-12-14 b
我想要实现的是,对于每个唯一 id(B
示例中的列),从最近的行开始,并根据日期条件删除行:如果在 10 天内插入具有现有 id 的行具有该 ID 的最近行,它只是有效的最新行。所以在这个例子中,以 10 天为限制,我最终会得到这个结果:
A B
0 2020-01-01 a
2 2019-12-17 a
3 2020-01-01 b
4 2019-12-14 b
任何想法将不胜感激!
解决方案
这是一种方法,使用diff
with cumsum
,得到当天的差异总和,然后我们得到除数//
s=df.groupby('B').A.apply(lambda x : x.diff().dt.days.cumsum().fillna(0).abs()//10)
df=df.groupby([df.B,s]).head(1)
A B
0 2020-01-01 a
2 2019-12-17 a
3 2020-01-01 b
4 2019-12-14 b
推荐阅读
- c# - 如何将通用存储库(或业务逻辑层)注入 ViewModel
- c# - EF Core 5 在迁移中创建了两次表
- flutter - 如何将数字(通过单击按钮“OnPressed 属性”)从 stful 小部件(应用程序的第一个屏幕)传递到第二页的 ListView.builder
- python-3.x - Python中列表列表的数据标准化
- node.js - 没有用户注册时如何保护我的 api 端点
- javascript - 使用 javascript 检查 iframe 中是否存在特定文本
- ios - Firebase Crashlytics 上的“上传缺少的 dSYM 以查看来自 1 个版本的崩溃”
- spring - Spring @PreAuthorize 抛出 LazyInitializationException 从 Hibernate 访问惰性数据
- javascript - 不隐藏我的 API 密钥和秘密有什么风险?
- java - Docker:Java+Python 应用程序的基础镜像