【问题标题】: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

【问题讨论】:

    标签: python pandas date datetime group-by


    【解决方案1】:
    1. date 转换为日期时间。
    2. date 分组ID 并找出连续行之间的差异
    3. timedelta 差异中提取天数部分并将其与 30 进行比较
    4. 根据掩码过滤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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 2016-12-24
      相关资源
      最近更新 更多