Python 计算两个日期时间之间的观察次数
我有一个关于许可证的数据集,对于每个许可证,我可以看到它的发布日期和到期日期: 数据Python 计算两个日期时间之间的观察次数,python,Python,我有一个关于许可证的数据集,对于每个许可证,我可以看到它的发布日期和到期日期: 数据 License ID Issue Date Expiration Date 1 2008-04-02 2008-07-10 2 2008-06-03 2008-09-12 3 2008-07-14 2008-10-21 4 2008-08-15 2008
License ID Issue Date Expiration Date
1 2008-04-02 2008-07-10
2 2008-06-03 2008-09-12
3 2008-07-14 2008-10-21
4 2008-08-15 2008-11-12
然后我想计算一天中有多少许可证处于活动状态
输出
Day Number of Active Licenses
2008-04-01 0
2008-04-02 1
2008-04-03 1
...
2008-06-03 2
...
2008-07-11 1
...
2008-07-15 2
我已经有了一个我想计算许可证号码的天数列表。其格式如下:
activeDay = [2008-04-01, 2008-04-02, ..., 2008-12-31]
我认为可能存在一个循环:
对于activeDay
中的每个日
,为每个观察(许可证ID)生成一列,如果该日
介于发布日期
和到期日期
之间,则该列等于1
,如果日
在间隔之外,则该列等于0
[发布日期,过期日期]。然后我们可以将此列中的数字相加,并获得活动许可证的计数
可能存在一种更简单的方法来使用函数.count()
但是,我不知道如何实现这两个想法,我在网上找到的答案只是计算两次约会之间的天数……有人能帮我吗?非常感谢!!你可以使用
import datetime
df = pd.DataFrame([['1','2008-04-02','2008-07-10']],
columns=['license', 'issue', 'expire'])
parse_date = lambda x: return datetime.datetime.strptime(x, '%Y-%m-%d')
dt = parse_date('2008-06-01')
date_between = lambda x: parse_date(x['issue']) > dt and parse_date('expire') < dt
df = df[df.apply(date_between)]
非常感谢您的快速回复!!这真的救了我一命。但是,我在运行codedf=df[df.apply(date_-between)]
时遇到了一个错误。它说KeyError:('issue','occurrented at index license')
你知道可能出了什么问题吗?我修改了date_-between函数来指定'expire'的数据帧:parse_-date(x['expire']
但这并不能修复错误…@Tian我在使用我精心编制的数据集,请注意,我的案例中的列名是issue
和expire
。您的数据框使用的列名不同。有关更多信息,请阅读:@Tian在创建数据框df=pd.dataframe(lst,columns)时修复列名=['col1','col2'])
等。非常感谢您提供的详细信息和参考资料!它工作得非常完美!
s = []
for ds in active_day:
dt = parse_date(ds)
n = df[df.apply(date_between)].license.count()
s.append((dt, n))
result_df = df.DataFrame(s, columns=['active_day', 'count'])