排序日期列表:
[
datetime.date(2006, 8, 15),
datetime.date(2006, 9, 12),
datetime.date(2007, 8, 10),
datetime.date(2021, 4, 6),
datetime.date(2021, 4, 16),
datetime.date(2021, 4, 19)
...
]
我想有包含日期的组,所有日期之间最多30天(组的第一个元素和最后一个元素之间的距离将为<= 30天)
例如,使用前面的列表,我将得到:
- group_1 =[日期时间。日期(2006,8,15),日期时间。日期(2006,9,12)](日期之间<= 30天)
- group_2 = [datetime. time]Date (2021, 4, 6), datetime。Date (2021, 4, 16), datetime。date(2021, 4, 19)]& lt; 30岁=
- group_3 = [datetime. time]date(2007,8,10)](没有其他相关日期<= 30天)
我尝试使用跨工具组,但关键函数不允许2个日期比较,如"lambda x,y:(x-y)。days <= 30…"我不知道我是否可以使用groupby来解决这个问题,或者我需要其他的itertools功能。我知道我可以为它建立一个python算法,但我认为存在一个简单的选项来解决这个问题,但我没有找到它:(
谢谢!
itertools.groupby
表示对彼此不依赖的项进行分组。在您的情况下,通过插入一个新组(当当前日期比当前组的第一个日期晚30天以上时),简单地遍历日期列表以构建组列表既容易又清晰:
dates = [
datetime.date(2006, 8, 15),
datetime.date(2006, 9, 12),
datetime.date(2007, 8, 10),
datetime.date(2021, 4, 6),
datetime.date(2021, 4, 16),
datetime.date(2021, 4, 19),
datetime.date(2021, 5, 7)
]
threshold = datetime.timedelta(30)
groups = []
for date in dates:
if not groups or date - group[0] > threshold:
group = []
groups.append(group)
group.append(date)
groups
将变成:
[[datetime.date(2006, 8, 15), datetime.date(2006, 9, 12)],
[datetime.date(2007, 8, 10)],
[datetime.date(2021, 4, 6), datetime.date(2021, 4, 16), datetime.date(2021, 4, 19)],
[datetime.date(2021, 5, 7)]]
这是一个pandas
解决方案,将日期与下一个日期进行比较,并检查两者之间是否有30天。然后用cumsum
分配一个组号:
import pandas as pd
import datetime
data = [ datetime.date(2006, 8, 15), datetime.date(2006, 9, 12), datetime.date(2007, 8, 10), datetime.date(2021, 4, 6), datetime.date(2021, 4, 16), datetime.date(2021, 4, 19)]
df = pd.DataFrame(data, columns=['date'])
df['groups'] = (df['date'].diff() > pd.Timedelta(30, unit='D')).cumsum()
输出:
在这种情况下,使用普通的旧式for循环的迭代解决方案非常简单。
我不认为使用itertools
来解决这个问题是简单或有效的,因为在这种情况下,分组取决于数据的上下文,这可能会产生O(N^2)的解决方案,而迭代方法是O(N)。
dts = [
datetime.date(2006, 8, 15),
datetime.date(2006, 9, 12),
datetime.date(2007, 8, 10),
datetime.date(2021, 4, 6),
datetime.date(2021, 4, 16),
datetime.date(2021, 4, 19)
]
def groupDateTimes(dts):
i = 0
ans = []
group = []
delta30days = datetime.timedelta(days=30)
while i < len(dts):
cur = dts[i]
if not group:
group.append(cur)
elif cur - group[0] <= delta30days:
group.append(cur)
else:
ans.append(group)
group = [cur]
i += 1
if group:
ans.append(group)
return ans
print(groupDateTimes(dts)) // [[datetime.date(2006, 8, 15), datetime.date(2006, 9, 12)], [datetime.date(2007, 8, 10)], [datetime.date(2021, 4, 6), datetime.date(2021, 4, 16), datetime.date(2021, 4, 19)]]
相关内容
- 如何对包含日期列表的数据框中的列进行排序?
- Python查找日期列表变为非连续的时间
- 使用Monod或半群在日期列表中查找最小的日期
- 使用循环逻辑以dd/mm/22格式打印2022年的日期列表
- 从sqlite3 (pandasql)中的两个日期列中获取日期列表
- 如何按固定的日期列表分组
- 在Android中创建带有条件的日期列表
- 检查日期列表是否位于日期范围列表之间
- 在python中以日期递增一天的方式展开日期列表
- r语言 - 无法从标题列表中获取所有日期列表
- 如何将业务日期列表转换为连续业务日期的嵌套列表?
- 另一个表中两个日期之间的日期列表
- 以特定格式创建日期列表
- 将日期列表转换为DateFrom/DateTo范围的最佳方法
- 比较两个日期列表,计算交付成果是否按时完成
- 如何确定日期列表中的天数差异
- 用while循环创建一个日期列表
- Sqlite /过去x个日历日的日期列表
- 如何在Swift中解析电影和日期列表?
- pandas数据框架中两个日期变量之间的日期列表
最新更新
- 根据Intel编译器,Fortran内部写入突然出现错误
- 在从只读接口继承属性的子类上包含setter属性
- About datetime class python
- 将稀疏矩阵转换为pandas数据框架
- 基于同一表中的另一行生成/计算的列
- 导入Vuetify3 v-data表的DataTableHeader类型的typescript &g
- 如何使用web3.py和Chainstack websocket获取内存池挂起事务
- 我如何在Javascript中调用曾祖父的方法?
- Ansible Roles and vars/vault.yml file
- 无法通过rest api下载CSV文件
- 比较两个VectorDrawables在Kaspresso - Android中失败
- 如何从组件调用状态到页面?
- 在场景生成器中,我正在添加css文件,遇到如下问题:css文件没有实现和显示
- 如何在不使用应用商店的情况下将我的flutter应用程序下载到iPhone
- 函数返回未来<dynamic>
- 从给定的字符和长度(wordlist)生成所有可能的组合
- 我怎样才能得到一个函数来返回python表的每一行?
- 如何从嵌套列表中选择随机索引
- 获取事实表中事实表的开始日期和结束日期之间的所有日期
- 来自类属性的类型提示
- JQ检查数组是否包含元素
- 使用Knex检查现有id
- 用于Spring MVC的Spring启动驱动器,在另一个端口上没有Spring启动
- 在 GCP 云构建中,GitLab CI/CD 的环境文件是否有等效项?
- 为什么我们需要等待?
- 当我运行我的KB主程序时,我得到编译错误:包javax.xml.bind.annotation不存在
- Java:从软链接路径获取执行jar路径
- 用多个字符串变量填充JSON
- 将DIV元素中的所有单词转换为SPAN元素的id
- 如何在gitlab中配置端口转发?
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium