gpt4 book ai didi

python - 在 Pandas 数据帧中查找 "best"切片而不循环

转载 作者:太空宇宙 更新时间:2023-11-03 19:48:40 25 4
gpt4 key购买 nike

我正在开发一个项目,其中导入 .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

最佳答案

抱歉,我没有尽快将其发送给您,但我认为这就是您正在寻找的内容。

def rollKilos(kilometers):
df = pd.DataFrame.from_dict({'KM':(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
,'Time':(5.3, 5.25, 5.35, 5.36, 5.42, 5.2, 5.25, 5.5, 5.4, 5.15, 5.25, 5.35, 5.3, 5.2, 5.3, 5.1)})
df = df.set_index('KM')
return min(df.rolling(kilometers).mean()['Time'][kilometers:])

df.rolling(5).mean()
Out[23]:
Time
KM
1 NaN
2 NaN
3 NaN
4 NaN
5 5.336
6 5.316
7 5.316
8 5.346
9 5.354
10 5.300
11 5.310
12 5.330
13 5.290
14 5.250
15 5.280
16 5.250

rollKilos(5)
Out[30]: 5.249999999999998

rollKilos(3)
Out[31]: 5.200000000000002

rollKilos(10)
Out[32]: 5.279999999999999

关于python - 在 Pandas 数据帧中查找 "best"切片而不循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59975805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com