代码之家  ›  专栏  ›  技术社区  ›  ds_user

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

  •  2
  • ds_user  · 技术社区  · 6 年前

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

    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
    

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

    谢谢。

    2 回复  |  直到 3 年前
        1
  •  0
  •   gofvonx    6 年前

    对于多个客户,您可以使用 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])
    
        2
  •  1
  •   Scott Boston    6 年前

    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