我正在做一个项目,我导入一个 .gpx 文件并将其转换为 Pandas 数据框以进行进一步分析。此文件包含来自 Strava、Endomondo、Runkeeper 等的锻炼的位置和时间数据。我已经计算了总距离、时间和速度等统计数据,但我还想找到锻炼中特定距离的最快或最佳时间。因此,对于 16 公里的锻炼,我想在这 16k 范围内计算我最快的 5k、10k 等。
我写了一些有用的东西,但它涉及循环数据框。由于循环数据帧是我应该避免的事情,我觉得应该有一个更有效的解决方案。
数据框看起来像这样:
distance_dis_3d time_delta
0 0.000000 0.0
1 0.000000 18.0
2 28.229476 1.0
3 5.452599 3.0
4 3.078864 1.0
...
此代码适用于查找最快的 5000 米:
df_selected['distance_cumsum'] = df_selected['distance_dis_3d'].cumsum()
df_selected['time_cumsum'] = df_selected['time_delta'].cumsum()
df_output = pd.DataFrame(columns=['time', 'distance', 'minutes_per_kilometer'])
for i in range(len(df_selected.index)):
df_xK = df_selected[(df_selected['distance_cumsum'] - df_selected['distance_cumsum'].iat[i]) >= 5000]
if(len(df_xK.index) != 0):
time = df_xK['time_cumsum'].iat[0] - df_selected['time_cumsum'].iat[i]
distance = df_xK['distance_cumsum'].iat[0] - df_selected['distance_cumsum'].iat[i]
minutes_per_kilometer = (time/60)/(distance/1000)
df_output = df_output.append({'time': time, 'distance': distance, 'minutes_per_kilometer': minutes_per_kilometer}, ignore_index=True)
best_5k = df_output.loc[df_output['minutes_per_kilometer'].idxmin()]
print('Time 5K:', floor(best_5k['time'] / 60), 'min', floor(best_5k['time'] % 60), 'sec.')
我知道我应该使用矢量化或 .apply(),但我不知道如何在此处执行此操作。因此,非常感谢任何帮助!谢谢!
可以在此处下载测试文件:http: //gofile.me/2RsVN/dos1tPTVD