我是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天是客户。