首页 > 解决方案 > 取最近的日期和最远的日期,并使用 .groupby 计算它们之间的月份

问题描述

我想获取这些日期之间的月数(在最大日期和最小日期之间)并在 groupby 中保持相同的顺序

图片

标签: python-3.xpandasanacondapandas-groupbyjupyter

解决方案


一种可能的解决方案是从dateac开始- 您的分组结果(显示在您的图片中)。我还假设源 DataFrame 的ORDER_INST列是datetime类型(不是字符串),因此只有这种类型在 datesac 中也具有 MultiIndex 的级别1

要分别计算每个 MRN(MultiIndex 的级别 0)的月份跨度,请定义一个函数,以应用于每个组:

def monthSpan(grp):
    dates = grp.index.get_level_values(1)
    return (dates.max().to_period('M') - dates.min().to_period('M')).n

然后将MonthSpan列添加到您的df中,运行:

datesac['MonthSpan'] = datesac.groupby(level=0).transform(monthSpan);

结果是:

                    List  MonthSpan
MRN     ORDER_INST                 
1000031 2010-04-12     0         11
        2010-04-16     0         11
        2010-04-17     0         11
        2010-04-18     0         11
        2011-03-01     0         11
9017307 2018-11-27     0          7
        2019-02-04     0          7
        2019-04-25     0          7
        2019-05-14     0          7
        2019-06-09     0          7

推荐阅读