用Python计算具有多个购买日期和重叠日期的客户的不重复天数

时间:2020-05-10 18:29:39

标签: python date

我是Python的新手,如果这是一个愚蠢的问题,对不起。

我有一个大熊猫数据框,其中包含有关已获得多种服务的客户的合同信息,如下所示:

import pandas as pd

data = {'id' : [100,100,100,100,100],
      'start_date' : ['03-05-2013','03-05-2013','08-05-2013','05-05-2013','07-07-2013'],
      'end_date' : ['02-06-2013','28-05-2013','27-06-2013','20-05-2013','22-07-2013'],
      'product' : ['A','A','B','C','A']} # This line is to contextualize that there are several repeated products as well

df = pd.DataFrame (data)

df['start_date'] = pd.to_datetime(df['start_date'], format='%d-%m-%Y')
df['end_date'] = pd.to_datetime(df['end_date'], format='%d-%m-%Y')


# Data frame looks like this:
    id  start_date  end_date    product
0   100 2013-05-03  2013-06-02  A
1   100 2013-05-03  2013-05-28  A
2   100 2013-05-08  2013-06-27  B
3   100 2013-05-05  2013-05-20  C
4   100 2013-07-07  2013-07-22  A

在结束日期和开始日期之间进行简单的日期减法会生成以下内容:

df['days_as_client'] = df['end_date'] - df['start_date']

    id  start_date  end_date    product days_as_client
0   100 2013-05-03  2013-06-02  A       30 days 
1   100 2013-05-03  2013-05-28  A       25 days 
2   100 2013-05-08  2013-06-27  B       50 days 
3   100 2013-05-05  2013-05-20  C       15 days 
4   100 2013-07-07  2013-07-22  A       15 days

尽管这很有参考价值,但我真正需要的是此客户使用服务的独特日子。我不确定应该如何看,但是应该是这样的:

    id  start_date  end_date    product days_as_client  total_days_as_client
0   100 2013-05-03  2013-06-02  A       30 days         50 days
1   100 2013-05-03  2013-05-28  A       25 days         50 days
2   100 2013-05-08  2013-06-27  B       50 days         50 days
3   100 2013-05-05  2013-05-20  C       15 days         50 days
4   100 2013-07-07  2013-07-22  A       15 days         50 days

请注意前4行中的重叠日期,其中最小日期为2013-05-03,最大日期为2013-06-27(35天),接着是跳转,然后在2013-07- 07持续15天,因此总共有50天是客户。

0 个答案:

没有答案