【发布时间】:2021-02-04 14:13:38
【问题描述】:
我想计算连续期间的天数。
在下面的df中我有四列:
- 标识;代表一个人。
- 期间;一个数字,其中最低的是第一个周期,最高的是最新的。
- in_date;期间开始的日期。
- out_date;期限结束的日期。
我想构建一个执行以下操作的通用函数:
-
计算连续周期的天数。如果两个时期之间的天数小于 90,则认为它们是连续的。
-
如果 id 的最后一个时期的 out_date 为 2013 年,我只想计算天数。如果最后一个时期的“out_date”为 2014 年或 2012 年,我想忽略该 ID。
-
我想在结果变量中包含周期之间的天数。
我的问题是,因为我对 Python 还很陌生,所以我无法想出一个好主意如何计算周期之间的天数并对连续周期进行分类。任何帮助将不胜感激。
import pandas as pd
import numpy as np
import datetime
data = {'id':[1, 1, 1, 2, 2, 2, 2, 3, 3, 3],
'period':[1, 2, 3, 1, 3, 5, 6, 2, 3, 4],
'in_date': ['2011-02-15','2011-11-10','2012-10-13',
'2010-04-03','2012-02-17','2012-08-15','2014-01-04','2010-06-01','2012-03-29','2012-09-12'],
'out_date': ['2011-05-21','2012-10-11','2013-10-25',
'2012-02-16','2012-02-19','2013-11-23','2014-12-18','2011-08-21','2012-09-11','2013-01-10']}
df = pd.DataFrame(data)
df['in_date'] = pd.to_datetime(df['in_date'])
df['out_date'] = pd.to_datetime(df['out_date'])
df['n_days'] = df['out_date'] - df['in_date']
预期输出:
【问题讨论】:
-
我发布了一个答案,但我会注意到,当我为它编写代码时,我的第一个 id 没有得到 745,所以我要么误解了,要么上面的值不正确。
-
@Rick M - 这是我的错误。非常感谢您的努力!看起来不错!今天我将在我的真实世界数据集上尝试您的解决方案。