12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import pandas as pd
- def find_intervals_exceeding_threshold(df_ego, threshold=0.2):
- start_time_list = []
- time_length_list = []
- time_list = df_ego[(df_ego["obstacle"] == 1) & (abs(df_ego["speed_linear"]) < 0.01)]["simTime"].tolist()
- # 确保时间列表至少有两个元素
- if len(time_list) < 2:
- return [] # 或者可以抛出一个异常,因为没有足够的数据来比较
- # 初始化变量
- start_time = time_list[0] # 当前连续时间段的起始时间
- intervals = [] # 存储超过阈值的时间段信息
- # 遍历时间列表(从第二个元素开始)
- for i in range(1, len(time_list)):
- # 计算当前元素与前一个元素的差值
- difference = time_list[i] - time_list[i - 1]
- # 如果差值超过阈值,则记录前一个时间段的信息
- if difference > threshold:
- # 注意:这里我们返回的是前一个时间段的起始和终止时间(以及它们的差值)
- # 但按照题目要求,我们只返回差值
- # 终止时间是前一个元素,即 time_list[i-1]
- # 起始时间是之前记录的 start_time
- interval_length = time_list[i - 1] - start_time
- intervals.append((start_time, time_list[i - 1], interval_length))
- # 更新起始时间为当前元素,以便开始记录下一个时间段
- start_time = time_list[i]
- # 处理最后一个时间段(如果它存在且没有因为超过阈值而被记录)
- if time_list[-1] != start_time:
- # 注意:这里我们假设列表的最后一个元素之后没有更多的元素来比较
- # 因此,我们总是将最后一个元素视为前一个时间段的终止时间
- interval_length = time_list[-1] - start_time
- intervals.append((start_time, time_list[-1], interval_length))
- interval_count = len(intervals)
- for start, end, length in intervals:
- start_time_list.append(start)
- time_length_list.append(length)
- # 如果只需要差值,可以只返回差值的列表
- # return [interval[2] for interval in intervals]
- # 返回包含起始时间、终止时间和差值的元组列表
- return start_time_list, time_length_list, interval_count
- if __name__ == "__main__":
- df_ego = pd.read_csv(r"D:\Cicv\朴津项目\pji_outdoor_robot_evaluate_real_0818\task\test_0807-1\EgoState_pji.csv")
- intervals = find_intervals_exceeding_threshold(df_ego)
- print("intervals is", intervals)
- for start, end, length in intervals:
- print(f"时间段从 {start:.2f}s 到 {end:.2f}s,长度为 {length:.2f}s")
|