data_time_align.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import pandas as pd
  2. import numpy as np
  3. def data_time_align(base_time, df):
  4. # 特判,如果输入的dataframe无数值,那么直接返回
  5. if df.empty:
  6. return df
  7. # 创建一个新的递增的 simTime 序列,从 0 开始,步长为 0.01
  8. new_sim_time_values = np.arange(0, base_time.max() + 0.01, 0.01)
  9. # 创建一个映射字典,将原始 simTime 值映射到新的 simTime 值
  10. original_to_new_sim_time = {original: new_sim_time_values[i] for i, original in enumerate(base_time)}
  11. # 使用isin函数来过滤df,并筛选出simFrame大于0的数据
  12. filtered_df = df[(df['simTime'].isin(base_time)) & (df['simFrame'] > 0)].reset_index(drop=True)
  13. # 使用映射字典来替换 filtered_df 中的 simTime 列
  14. filtered_df['simTime'] = filtered_df['simTime'].map(original_to_new_sim_time)
  15. # 同步更新simFrame
  16. filtered_df['simFrame'] = (filtered_df['simTime'] * 100 + 1).round().astype(int)
  17. print("Alignment over.")
  18. return filtered_df
  19. # def data_time_align(base_time, df):
  20. # # 特判,如果输入的dataframe无数值,那么直接返回
  21. # if df.empty:
  22. # return df
  23. #
  24. # # 使用isin函数来过滤df,并筛选出simFrame大于0的数据
  25. # filtered_df = df[(df['simTime'].isin(base_time)) & (df['simFrame'] > 0)].reset_index(drop=True)
  26. #
  27. # # 创建一个新的递增的 simTime 序列,从 0 开始,步长为 0.01
  28. # new_sim_time_values = np.arange(0, filtered_df['simTime'].max() + 0.01, 0.01)
  29. #
  30. # # 创建一个映射字典,将原始 simTime 值映射到新的 simTime 值
  31. # original_sim_times = filtered_df['simTime'].unique() # 首先获取唯一的 simTime 值和它们的索引
  32. # original_to_new_sim_time = {original: new_sim_time_values[i] for i, original in enumerate(original_sim_times)}
  33. #
  34. # # 使用映射字典来替换 filtered_df 中的 simTime 列
  35. # filtered_df['simTime'] = filtered_df['simTime'].map(original_to_new_sim_time)
  36. #
  37. # # 同步更新simFrame
  38. # filtered_df['simFrame'] = (filtered_df['simTime'] * 100 + 1).round().astype(int)
  39. # print("Alignment over.")
  40. #
  41. # return filtered_df
  42. if __name__ == '__main__':
  43. df_ego1 = pd.read_csv('EgoState.csv')
  44. df_ego = df_ego1[(df_ego1['simFrame'] % 10 == 0) & (df_ego1['simFrame'] > 0)].copy()
  45. # 从df_ego中获取simTime的唯一值列表
  46. base_time = df_ego['simTime'].unique()
  47. df_1 = pd.read_csv('DriverCtrl.csv')
  48. df_2 = pd.read_csv('LaneInfo.csv')
  49. # df_3 = pd.read_csv('VehState.csv')
  50. result_1 = data_time_align(base_time, df_1)
  51. result_2 = data_time_align(base_time, df_2)
  52. # result_3 = data_time_align(base_time, df_3)
  53. print(1)
  54. #
  55. # # 使用isin函数来过滤df_1, df_2, df_3,并筛选出simFrame大于0的数据
  56. # filtered_df_1 = df_1[(df_1['simTime'].isin(base_time)) & (df_1['simFrame'] > 0)]
  57. # filtered_df_2 = df_2[(df_2['simTime'].isin(base_time)) & (df_2['simFrame'] > 0)]
  58. # filtered_df_3 = df_3[(df_3['simTime'].isin(base_time)) & (df_3['simFrame'] > 0)]
  59. #
  60. # filtered_df_1 = filtered_df_1.reset_index(drop=True)
  61. # filtered_df_2 = filtered_df_2.reset_index(drop=True)
  62. # filtered_df_3 = filtered_df_3.reset_index(drop=True)
  63. #
  64. # # 假设 filtered_df_1, filtered_df_2, filtered_df_3 已经是过滤后的 DataFrame
  65. #
  66. # # 创建一个新的递增的 simTime 序列,从 0 开始,步长为 0.01
  67. # new_sim_time_values = np.arange(0, filtered_df_1['simTime'].max() + 0.01, 0.01)
  68. #
  69. # # 创建一个映射字典,将原始 simTime 值映射到新的 simTime 值
  70. # # 首先获取唯一的 simTime 值和它们的索引
  71. # original_sim_times = filtered_df_1['simTime'].unique()
  72. # original_to_new_sim_time = {original: new_sim_time_values[i] for i, original in enumerate(original_sim_times)}
  73. #
  74. # # 使用映射字典来替换 filtered_df_1 中的 simTime 列
  75. # filtered_df_1['simTime'] = filtered_df_1['simTime'].map(original_to_new_sim_time)
  76. #
  77. # # 对于 simFrame,如果它也需要基于新的 simTime 重新赋值(例如,基于新的索引),可以这样做:
  78. # # filtered_df_1['simFrame'] = filtered_df_1.simTime * 100
  79. # # filtered_df_1['simFrame'] = filtered_df_1.simFrame.astype()
  80. # filtered_df_1['simFrame'] = (filtered_df_1['simTime'] * 100 + 1).round().astype(int)
  81. #
  82. # # 对 filtered_df_2 和 filtered_df_3 做同样的处理
  83. # # original_sim_times = filtered_df_2['simTime'].unique()
  84. # # original_to_new_sim_time = {original: new_sim_time_values[i] for i, original in enumerate(original_sim_times)}
  85. # filtered_df_2['simTime'] = filtered_df_2['simTime'].map(original_to_new_sim_time)
  86. # # filtered_df_2['simFrame'] = filtered_df_2.simTime * 100
  87. # filtered_df_2['simFrame'] = (filtered_df_2['simTime'] * 100 + 1).round().astype(int)
  88. #
  89. # # original_sim_times = filtered_df_3['simTime'].unique()
  90. # # original_to_new_sim_time = {original: new_sim_time_values[i] for i, original in enumerate(original_sim_times)}
  91. # filtered_df_3['simTime'] = filtered_df_3['simTime'].map(original_to_new_sim_time)
  92. # # filtered_df_3['simFrame'] = filtered_df_3.simTime * 100
  93. # filtered_df_3['simFrame'] = (filtered_df_3['simTime'] * 100 + 1).round().astype(int)
  94. #
  95. # # 现在 filtered_df_1, filtered_df_2, filtered_df_3 中的 simTime 列已经被重新赋值,并且每个原始 simTime 值都映射到了新的唯一 simTime 值
  96. # # simFrame 列也已经被重新赋值为对应的行索引