如果日期在给定范围内,则从每个组中删除行

Posted

技术标签:

【中文标题】如果日期在给定范围内,则从每个组中删除行【英文标题】:Drop rows from each group if dates are within a given range 【发布时间】:2018-06-29 07:05:05 【问题描述】:

给定一个如下所示的 DataFrame:

dfx = pd.DataFrame("ID":["A", "A", "C" ,"B", "B"], 
                    "date":["01/01/2014","01/31/2014","01/23/2014","01/01/2014","01/20/2014"])

我想删除“重复项”。 “重复”定义为行 ID 相同但它们之间的“日期”小于 30 天的行。

删除“重复项”后生成的 DataFrame 应显示为:

ID    date
A   01/01/2014
A   01/31/2014
C   01/23/2014
B   01/01/2014

【问题讨论】:

【参考方案1】:
    date 转换为日期时间。 将date 分组ID 并找出连续行之间的差异 从timedelta 差异中提取天数部分并将其与 30 进行比较 根据掩码过滤dfx

dfx[~pd.to_datetime(dfx.date).groupby(dfx.ID).diff().dt.days.lt(30)]

  ID        date
0  A  01/01/2014
1  A  01/31/2014
2  C  01/23/2014
3  B  01/01/2014

【讨论】:

以上是关于如果日期在给定范围内,则从每个组中删除行的主要内容,如果未能解决你的问题,请参考以下文章

Java - 在指定的给定月份 - 年份范围内打印每个月的第一个和最后一个日期

如果选定的单元格在范围内,Excel 删除行

VBA - 删除不在给定日期范围内的数据

如果子字符串存在,则从元组中删除项目

PostgreSQL:如何在给定日期范围内的每一天为每个帐户选择最后余额? [复制]

Git:在日期范围内更改的平均行数和总行数