find_intervals_exceeding_threshold.py 2.6 KB

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