查找重叠期间之间的月数-熊猫

时间:2018-10-10 02:51:16

标签: python-3.x pandas pandas-groupby

我拥有客户的数据集及其政策,我试图找到客户与我们在一起的月数。 (任期)

df

cust_no poly_no start_date  end_date
1       1       2016-06-01   2016-08-31
1       2       2017-05-01   2018-05-31
1       3       2016-11-01   2018-05-31

输出应该看起来像

cust_no no_of_months
1        22

因此,基本上,它应该摆脱没有政策的月份,并且将重叠期计算一次而不是两次。我必须为每个客户执行此操作,所以按cust_no分组,我该怎么做?

谢谢。

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是为每个记录创建日期范围,然后使用堆栈获取所有月份。接下来,仅使用唯一值仅计算一个月一次:

s = df.apply(lambda x: pd.Series(pd.date_range(x.start_date, x.end_date, freq='M').values), axis=1)
ss = s.stack().unique()
ss.shape[0]

输出:

22

答案 1 :(得分:0)

对于多个客户,您可以使用groupby。继续@ScottBoston's answer

df_range = df.apply(lambda r: pd.Series(
                    pd.date_range(start=r.start_date, end=r.end_date, freq='M')
                    .values), axis=1)
df_range.groupby('cust_no').apply(lambda x: x.stack().unique().shape[0])