python处理多个时间段是否重叠案例

导入数据后,现聚合分组需要判断时间,利用循环写在列表中传参到判断时间段是否重叠的函数中

def group_by_time(df):
    grouped_df = df.groupby('达人UID')
    result=[]
    for name, group in grouped_df:
        print(group)
        time_list = []
        for index, row in group.iterrows():
            start_time = row["开始时间"]
            end_time = row["结束时间"]
            times = (start_time, end_time)
            time_list.append(times)
        print(are_overlapping(time_list))
        result.append(are_overlapping(time_list))
    print(result)  #输出所以分组中时间重叠的情况

时间重叠判断函数

def are_overlapping(ranges):
    for i in range(len(ranges)):
        for j in range(i + 1, len(ranges)):
            if is_overlapping(ranges[i], ranges[j]):
                return True
    return False
def is_overlapping(range1, range2):
    start1, end1 = range1
    start2, end2 = range2

    # 检查两个范围是否重叠
    if start1 < end2 and start2 < end1:
        return True
    else:
        return False

合并代码

from datetime import datetime, timedelta
import os
import pandas as pd

def are_overlapping(ranges):
    for i in range(len(ranges)):
        for j in range(i + 1, len(ranges)):
            if is_overlapping(ranges[i], ranges[j]):
                return True
    return False


def is_overlapping(range1, range2):
    start1, end1 = range1
    start2, end2 = range2

    # 检查两个范围是否重叠
    if start1 < end2 and start2 < end1:
        return True
    else:
        return False


def group_by_time(df):
    grouped_df = df.groupby('达人UID')
    result=[]
    for name, group in grouped_df:
        print(group)
        time_list = []
        for index, row in group.iterrows():
            start_time = row["开始时间"]
            end_time = row["结束时间"]
            times = (start_time, end_time)
            time_list.append(times)
        print(are_overlapping(time_list))
        result.append(are_overlapping(time_list))
    print(result)

if __name__ == '__main__':
    data = pd.read_excel('文件')  #传入字段,接口数据更好处理【不用自己到文件】
    df = data[['达人UID', '开始时间', '结束时间']]
    group_by_time(df)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值