You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重采样Pandas DatetimeIndex时如何保留关联的WorkoutID字段?

解决保留周度最大Power对应WorkoutID的问题

嘿,这个场景我太熟悉啦!你当前的代码只针对power列做重采样求最大值,所以WorkoutID列自然会被丢弃。要同时拿到每周最大power对应的训练ID,我们需要先定位到每周里power值最大的那一行,再提取对应的信息。这里给你两种实用的解决方案:

方法一:用resample+idxmax定位索引后提取

这种方法效率较高,适合数据集较大的情况:

# 先获取每周power最大值所在的原DataFrame索引
weekly_max_indices = df['power'].resample('W').idxmax()

# 根据索引提取对应的WorkoutID和power值,并重命名power列
weekly_best_data = df.loc[weekly_max_indices, ['WorkoutID', 'power']].rename(columns={'power': 'best_power'})

idxmax()会返回每个周度分组中power最大值对应的原始行索引,接着用loc就能精准提取到该索引对应的WorkoutID和power值,最后重命名列让结果更清晰。

方法二:用groupby+apply直接取每组最大值行

如果习惯用分组操作,这种写法更直观:

from pandas import Grouper

# 按周分组,每组取power最大的那一行的指定列
weekly_best_data = df.groupby(Grouper(freq='W')).apply(
    lambda group: group.loc[group['power'].idxmax(), ['WorkoutID', 'power']]
)

# 调整列名和索引(可选,让结果更规整)
weekly_best_data = weekly_best_data.rename(columns={'power': 'best_power'}).reset_index(drop=False)

这里用Grouper指定按周度频率分组,apply函数里对每个分组找到power最大的行,再提取需要的列即可。

注意点

如果同一周内有多个训练的power值都是最大值,上述两种方法会默认取第一个出现的那一行的WorkoutID。如果需要保留所有并列最大值的训练ID,可以把idxmax()换成group['power'] == group['power'].max()来筛选所有符合条件的行。

内容的提问来源于stack exchange,提问作者Ethanopp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:25:38