python - 检测日期浓度(python中的列表)
问题描述
我有一个名为 Python 的列表,array_my_date
我需要检测日期的浓度。
标准是:
- 集中度定义为超过 3 个即将到来的日期。
- 如果日期在 25 天的时间段内,则认为日期已接近
array_my_date = []
array_my_date.append(pd.to_datetime('2013-06-24 00:00:00'))
array_my_date.append(pd.to_datetime('2013-06-26 00:00:00'))
array_my_date.append(pd.to_datetime('2013-06-27 00:00:00'))
array_my_date.append(pd.to_datetime('2013-06-29 00:00:00'))
array_my_date.append(pd.to_datetime('2013-07-01 00:00:00'))
array_my_date.append(pd.to_datetime('2013-07-03 00:00:00'))
array_my_date.append(pd.to_datetime('2013-07-04 00:00:00'))
array_my_date.append(pd.to_datetime('2013-07-06 00:00:00'))
array_my_date.append(pd.to_datetime('2013-07-07 00:00:00'))
array_my_date.append(pd.to_datetime('2013-07-08 00:00:00'))
array_my_date.append(pd.to_datetime('2015-03-01 00:00:00'))
array_my_date.append(pd.to_datetime('2015-03-04 00:00:00'))
array_my_date.append(pd.to_datetime('2017-09-29 00:00:00'))
array_my_date.append(pd.to_datetime('2017-10-02 00:00:00'))
array_my_date.append(pd.to_datetime('2017-10-06 00:00:00'))
array_my_date.append(pd.to_datetime('2017-10-07 00:00:00'))
array_my_date.append(pd.to_datetime('2017-10-08 00:00:00'))
array_my_date.append(pd.to_datetime('2017-10-09 00:00:00'))
array_my_date.append(pd.to_datetime('2018-12-09 00:00:00'))
预期的输出是第一个集中的日期。那是:
[Timestamp('2013-06-24 00:00:00'), Timestamp('2017-09-29 00:00:00')]
解决方案
首先,确保日期列表已排序:
dates = sorted(array_my_date)
然后,逐渐建立一个浓度列表:
concentrations = [[dates[0]]] # initialize our memory with the first date
for date in dates[1:]: # iterate through the rest of the dates
last_date = concentrations[-1][-1] # look at the last date we added
if (date - last_date) <= pd.Timedelta(days=25): # is it close enough to be in the same group?
concentrations[-1].append(date) # if so, then put it in the same group
else: # otherwise,
concentrations.append([date]) # make a new group with it at the head
这会产生以下结果:
>>> pprint.pprint(concentrations)
[[Timestamp('2013-06-24 00:00:00'),
Timestamp('2013-06-26 00:00:00'),
Timestamp('2013-06-27 00:00:00'),
Timestamp('2013-06-29 00:00:00'),
Timestamp('2013-07-01 00:00:00'),
Timestamp('2013-07-03 00:00:00'),
Timestamp('2013-07-04 00:00:00'),
Timestamp('2013-07-06 00:00:00'),
Timestamp('2013-07-07 00:00:00'),
Timestamp('2013-07-08 00:00:00')],
[Timestamp('2015-03-01 00:00:00'), Timestamp('2015-03-04 00:00:00')],
[Timestamp('2017-09-29 00:00:00'),
Timestamp('2017-10-02 00:00:00'),
Timestamp('2017-10-06 00:00:00'),
Timestamp('2017-10-07 00:00:00'),
Timestamp('2017-10-08 00:00:00'),
Timestamp('2017-10-09 00:00:00')],
[Timestamp('2018-12-09 00:00:00')]]
然后,您可以通过执行以下操作来获取每个时间段中的最早日期
earliest_of_each = [group[0] for group in concentrations]
推荐阅读
- c# - 可以查询 NotMapped 属性吗?
- python - 如何使用 Pandas 中的变量之一绘制堆积条形图?
- angularjs - AngularJS 指令加载控制器
- excel - 保存时excel vba阻止消息“引用未保存的文档”
- c# - 返回语句中的空合并运算符 - c#
- javascript - Sequelize - 如何选择和连接两个表?
- php - 在 Woocommerce 管理员电子邮件通知中显示产品 ACF 值
- c++ - 在业力规则中使用数字生成器时,uint_not_usable_without_attribute 静态断言失败
- java - 在字符串类型的二维数组中添加列和行?
- mule - 使用 MuleSoft 处理批量 API 负载