1

私は、.gpx ファイルをインポートし、さらに分析するために Pandas データフレームに変換するプロジェクトに取り組んでいます。このファイルには、Strava、Endomondo、Runkeeper などのワークアウトの場所と時間のデータが含まれています。合計距離、時間、速度などの統計は既に計算していますが、ワークアウト内の特定の距離の最速または最適な時間も見つけたいと考えています。したがって、16 キロのワークアウトでは、これらの 16 キロ内で最速の 5 キロ、10 キロなどを計算したいと考えています。

動作するものを書きましたが、データフレームをループする必要があります。データフレームのループは避けるべきものなので、もっと効率的な解決策が必要だと思います。

データフレームは次のようになります。

    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

4

1 に答える 1