Python 3.x 取最近的日期和最遥远的日期,用.groupby计算它们之间的月份

Python 3.x 取最近的日期和最遥远的日期,用.groupby计算它们之间的月份,python-3.x,pandas,anaconda,pandas-groupby,jupyter,Python 3.x,Pandas,Anaconda,Pandas Groupby,Jupyter,我想得到最大日期和最小日期之间的月数,并在groupby中保持相同的顺序 Pandas不允许将项分配给groupby对象无法将新列添加到groupby对象,因此必须拆分操作。一种解决方案是首先计算groupby对象的月差,将数据帧合并在一起,然后再次计算groupby 创建第一个groupby对象: datesac = acdates.groupby(['MRN']) 计算每个组之间的月差,并连接到原始数据帧或新数据帧。此方法需要numpy,因此需要导入 import numpy as np

我想得到最大日期和最小日期之间的月数,并在groupby中保持相同的顺序


Pandas不允许将项分配给groupby对象无法将新列添加到groupby对象,因此必须拆分操作。一种解决方案是首先计算groupby对象的月差,将数据帧合并在一起,然后再次计算groupby

创建第一个groupby对象:

datesac = acdates.groupby(['MRN'])
计算每个组之间的月差,并连接到原始数据帧或新数据帧。此方法需要numpy,因此需要导入

import numpy as np    

acdates_new = pd.merge(
    left=acdates,
    right=((datesac['ORDER_INST'].max() - df_group['ORDER_INST'].min())/np.timedelta64(1, 'M')).astype('int').rename("DATE_DIFF"),
    left_on='MRN',
    right_index=True
)
重组

datesac = acdates_new.groupby(['MRN'])

一个可能的解决方案是从一个日期囊开始——结果 图片中显示的分组的名称。 我还假设源数据帧的ORDER_INST列是datetime类型,而不是string,因此仅此类型也具有级别1 datesac中的多索引

分别计算每个MRN级别0的月跨度 多索引,定义要应用于每个组的函数:

def monthSpan(grp):
    dates = grp.index.get_level_values(1)
    return (dates.max().to_period('M') - dates.min().to_period('M')).n
然后将MonthPan列添加到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

请不要破坏你的帖子。发布问题后,它将属于CC by SA许可证下的堆栈溢出社区。如果您想解除此帖子与您帐户的关联,请参阅@RyanM you not full roll back the edition。请注意,修订版3删除了该图像,使问题与修订版2完全不同/没有用处。@user12986714我的第二次回滚在第一次更正该错误几秒钟后。但是谢谢你提醒我,以防我没注意到!除此之外,请发布文本而不是图像,这样其他人在回答时可以更轻松地复制/粘贴部分内容。@scipy?请不要。