Python 3.x 取最近的日期和最遥远的日期,用.groupby计算它们之间的月份
我想得到最大日期和最小日期之间的月数,并在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
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?请不要。