import numpy as np import pandas as pd STANDBY = 0 RIGHT_WARNING = 2 class LKA_Trigger(): def __init__(self, df_vehState): self.df_vehState = df_vehState def lane_keep_warning_status(self, left_or_right): ''' :return: start_vehstate: 状态机开始的时间,以列表形式存储 close_vehstate:状态机结束的时间,以列表形式存储 ''' groups = (self.df_vehState['LKA_status'] != self.df_vehState['LKA_status'].shift()).cumsum() LKA_left_groups = self.df_vehState[self.df_vehState['LKA_status'] == left_or_right].groupby(groups) # 初始化结果列表 result_times = [] # 使用enumerate来跟踪分组的顺序(模拟全局索引的奇偶性) for idx, (name, group) in enumerate(LKA_left_groups, start=1): result_time = [] # 获取片段的simTime值 sim_times = group['simTime'].tolist() # 根据分组的奇偶性(即这里的idx)选择simTime # if idx % 2 == 0: # 偶数组,选择第一个 if sim_times: # 确保列表不为空 result_time.append(sim_times[-1]) result_time.append(sim_times[-1]) result_times.append(result_time) return result_times def LKA_warning_active_time_statistics(self): warning_status_time_dict = {} left_warning = 1 right_warning = 2 LKA_left_vehstate = self.lane_keep_warning_status(left_warning) LKA_right_vehstate = self.lane_keep_warning_status(right_warning) warning_status_time_dict['LKA_left_active_time'] = LKA_left_vehstate warning_status_time_dict['LKA_right_active_time'] = LKA_right_vehstate return warning_status_time_dict if __name__ == '__main__': df_vehState = pd.read_csv(r"D:\Cicv\Lantu\数据\LKA_data2\data\VehState.csv") LKA = LKA_Trigger(df_vehState) vehstate = LKA.LKA_warning_active_time_statistics() print(vehstate)