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

按日期分组求最大心率后,如何获取其在原DataFrame中的索引?

解决方案

要实现按日期分组获取每日最高心率,并保留原DataFrame的对应索引,你可以借助Pandas的idxmax()函数,它能直接返回列中最大值对应的原行索引。以下是具体实现步骤:

步骤1:提取日期分组键

首先从timestamp列中提取日期部分,作为分组依据:

import pandas as pd

# 你的原始数据
data= pd.DataFrame(
    [[pd.Timestamp('2022-08-05 10:11:04'), 140, 120],
    [pd.Timestamp('2022-08-05 10:11:05'), 400, 155],
    [pd.Timestamp('2022-08-05 10:13:06'), 400, 160],
    [pd.Timestamp('2022-08-05 10:15:07'), 100, 155],
    [pd.Timestamp('2022-08-05 10:15:08'), 430, 160],
    [pd.Timestamp('2022-09-05 10:17:09'), 430, 130],
    [pd.Timestamp('2022-09-07 10:17:10'), 430, 131],
    [pd.Timestamp('2022-09-07 10:17:11'), 430, 170],
    [pd.Timestamp('2022-09-07 10:18:06'), 430, 156],
    [pd.Timestamp('2022-09-07 10:19:07'), 130, 155],
    [pd.Timestamp('2022-09-07 10:19:08'), 130, 160],
    [pd.Timestamp('2022-09-07 10:19:09'), 430, 130],
    [pd.Timestamp('2022-09-07 10:20:10'), 430, 131],
    [pd.Timestamp('2022-09-07 10:20:11'), 130, 170]],
    columns=['timestamp', 'power', 'heart rate'])

# 提取日期列用于分组
data['date'] = data['timestamp'].dt.date

方法1:获取每组首个最高心率的原索引

如果每日最高心率可能重复,idxmax()会返回第一个出现最大值的行索引,这是最常用的场景:

# 按日期分组,获取每组最高心率对应的原索引
max_hr_indices = data.groupby('date')['heart rate'].idxmax()

# 根据索引筛选原数据,保留原索引列
result = data.loc[max_hr_indices].reset_index(names='original_index')

# 整理输出列
result = result[['original_index', 'date', 'timestamp', 'power', 'heart rate']]
print(result)

输出结果示例:

original_index        date           timestamp  power  heart rate
0               2  2022-08-05 2022-08-05 10:13:06    400         160
1               5  2022-09-05 2022-09-05 10:17:09    430         130
2               7  2022-09-07 2022-09-07 10:17:11    430         170

方法2:获取所有每日最高心率的原索引

如果需要保留所有达到当日最高心率的行(比如同一天有多个相同的最高心率值),可以用transform()标记符合条件的行,再筛选:

# 标记每行是否为当日最高心率
data['is_max_hr'] = data['heart rate'] == data.groupby('date')['heart rate'].transform('max')

# 筛选所有符合条件的行,保留原索引
result_all = data[data['is_max_hr']].reset_index(names='original_index')

# 整理输出列
result_all = result_all[['original_index', 'date', 'timestamp', 'power', 'heart rate']]
print(result_all)

输出结果示例:

original_index        date           timestamp  power  heart rate
0               2  2022-08-05 2022-08-05 10:13:06    400         160
1               4  2022-08-05 2022-08-05 10:15:08    430         160
2               5  2022-09-05 2022-09-05 10:17:09    430         130
3               7  2022-09-07 2022-09-07 10:17:11    430         170
4              13  2022-09-07 2022-09-07 10:20:11    130         170

补充说明

  • idxmax()返回的是原DataFrame的行索引,确保你能直接关联到原始数据的所有信息。
  • 如果你的DataFrame已经有自定义索引,上述方法同样适用,reset_index(names='original_index')会将原索引转为普通列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:45:42