如果日期在给定范围内,则从每个组中删除行
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 - 在指定的给定月份 - 年份范围内打印每个月的第一个和最后一个日期