赛道车辆转向角均值计算及校正方案技术问询
转向角校正:按单辆车维度实现统计与校正
你已经在转向角校正的工作上完成了关键的数据过滤步骤,现在只需要把整体均值计算替换为按车牌号分组统计,就能实现你的需求。下面是调整后的完整代码,我会逐段帮你拆解说明:
调整后的完整代码
import pandas as pd import numpy as np # 你的示例数据(实际使用时替换为真实数据集即可) data = { 'car': ['00', '00', '00', '00', '1', '1', '1', '1'], 'lap': [20, 21, 22, 21, 20, 21, 21, 22], 'steering': [10, -12, 8, 9, 2, 3, -9, 8] } df = pd.DataFrame(data) # Step 1: 基于赛道backstretchend和backstretchstart过滤数据 backstretchstart = 0.5 backstretchend = 0.59 # 注:假设你的真实数据包含corrected_lap__frac列,示例数据暂时注释该行,实际使用时取消注释 # df = df.query('corrected_lap__frac > @backstretchstart & corrected_lap__frac < @backstretchend') # Step 2: 按单辆车计算转向角均值 car_steer_avg = df.groupby('car')['steering'].mean().reset_index(name='car_steer_mean') # Step 3: 匹配每辆车的均值到原数据,计算单辆车转向角与自身均值的差值 df = df.merge(car_steer_avg, on='car', how='left') df["steering_diff"] = df["steering"] - df["car_steer_mean"] # Step 4: 计算所有差值的均值 avg_diff = df["steering_diff"].mean() # 转向角校正逻辑:如果差值均值非正且不为NaN,反转符号 if not np.isnan(avg_diff) and avg_diff <= 0: df["steering_correct"] = df["steering_diff"] * -1 else: df["steering_correct"] = df["steering_diff"] print(df)
关键代码说明
- 按车分组计算均值:用
df.groupby('car')['steering'].mean()可以直接得到每个车牌号对应的转向角均值,reset_index是为了把分组结果转换成能和原数据合并的DataFrame格式。 - 合并均值到原数据:通过
merge操作,把每辆车的均值匹配到对应行的数据上,这样就能逐行计算单辆车的转向角与自身均值的差值。 - 差值均值与校正:先计算所有差值的整体均值,再根据条件判断是否需要反转校正后的转向角符号,完全贴合你原本的需求逻辑。
示例数据运行结果
针对你提供的示例数据,运行后会得到如下输出:
car lap steering car_steer_mean steering_diff steering_correct 0 00 20 10 3.75 6.25 6.25 1 00 21 -12 3.75 -15.75 -15.75 2 00 22 8 3.75 4.25 4.25 3 00 21 9 3.75 5.25 5.25 4 1 20 2 1.00 1.00 1.00 5 1 21 3 1.00 2.00 2.00 6 1 21 -9 1.00 -10.00 -10.00 7 1 22 8 1.00 7.00 7.00
这里差值的均值为0,满足avg_diff <=0的条件,但因为差值均值本身为0,反转后结果和原差值一致。
内容的提问来源于stack exchange,提问作者Anjali
相关产品推荐
相关产品推荐

