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



我有客户及其政策的数据集,我正在尝试查找客户与我们在一起的月数。(任期(

东风

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分组,我该怎么做?

谢谢。

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

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

对于多个客户,您可以使用groupby.继续@ScottBoston的回答:

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])

最新更新