【问题标题】:Drop overlapping periods less than 6 months in pandas dataframe在 pandas 数据框中删除少于 6 个月的重叠期
【发布时间】:2021-01-13 08:54:47
【问题描述】:

我有以下 Pandas 数据框,我想删除每个客户的日期差小于 6 个月的每个客户的行。例如,我想为 ID 为 1 的客户保留以下日期 - 2017-07-01、2018-01-01、2018-08-01

Customer_ID    Date
1          2017-07-01
1          2017-08-01
1          2017-09-01
1          2017-10-01
1          2017-11-01
1          2017-12-01
1          2018-01-01
1          2018-02-01
1          2018-03-01
1          2018-04-01
1          2018-06-01
1          2018-08-01
2          2018-11-01     
2          2019-02-01
2          2019-03-01
2          2019-05-01
2          2020-02-01
2          2020-05-01

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    定义以下函数来处理每组行(针对每个客户):

    def selDates(grp):
        res = []
        while grp.size > 0:
            stRow = grp.iloc[0]
            res.append(stRow)
            grp = grp[grp.Date >= stRow.Date + pd.DateOffset(months=6)]
        return pd.DataFrame(res)
    

    然后将此函数应用于每个组:

    result = df.groupby('Customer_ID', group_keys=False).apply(selDates)
    

    您的数据样本的结果是:

        Customer_ID       Date
    0             1 2017-07-01
    6             1 2018-01-01
    11            1 2018-08-01
    12            2 2018-11-01
    15            2 2019-05-01
    16            2 2020-02-01
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 2020-12-23
      • 1970-01-01
      • 2017-11-27
      • 2019-08-11
      • 2019-09-21
      相关资源
      最近更新 更多