在不循环的情况下找到熊猫数据框中的“最佳”切片

问题描述 投票:0回答:1

我正在一个项目中,我导入一个.gpx文件并将其转换为Pandas数据框以进行进一步分析。该文件包含来自Strava,Endomondo,Runkeeper等锻炼的位置和时间数据。我已经计算出诸如总距离,时间和速度之类的统计信息,但是随后我还想找到特定距离intra>锻炼中”的最快或最佳时间。因此,对于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

我正在一个项目中,我导入一个.gpx文件并将其转换为Pandas数据框以进行进一步分析。该文件包含来自Strava,...

python pandas dataframe gpx strava
1个回答
0
投票

这是一个非常粗糙的实现,根本没有效率,但是它应该起作用

© www.soinside.com 2019 - 2024. All rights reserved.