如何在Pandas分组后获取每日最高价对应的时间?
解决方法:获取每日最高价对应的日期、时间
嗨,这问题我之前也碰到过!你已经找到了每日最高价,但要关联上对应的时间,得换个思路——直接用groupby('Date')['High'].max()只能拿到最大值,没法带回对应的行信息,所以得用能定位到原行的方法。
方法一:用idxmax()定位最大值所在行
idxmax()会返回每个分组中指定列最大值的索引,之后用loc就能取出完整的行数据:
# 获取每个日期组中High列最大值对应的行索引 max_high_rows = df.groupby('Date')['High'].idxmax() # 根据索引提取目标列:Date、Time、High daily_high_details = df.loc[max_high_rows, ['Date', 'Time', 'High']]
如果同一天有多个相同的最高价,这个方法会保留所有对应的行;要是只想留一条,可以在最后加.drop_duplicates(subset='Date')。
方法二:用transform生成当日最大值列再筛选
transform能把分组计算的结果广播回原DataFrame的每一行,这样就能用布尔索引筛选出符合条件的行:
# 给原DataFrame添加一列,存当日的High最大值 df['daily_high_max'] = df.groupby('Date')['High'].transform('max') # 筛选出High等于当日最大值的行,只保留需要的列 daily_high_details = df[df['High'] == df['daily_high_max']][['Date', 'Time', 'High']]
为什么你之前的语法错了?
你写的df.groupby('Date','Time' as_index=False)有两个问题:
- 多个分组列必须放在列表里,正确写法是
groupby(['Date', 'Time']); - 就算语法对了,按
Date+Time分组也不是你要的结果——这会把每个5分钟的时间点都当成一个分组,而不是找每日最高对应的那个时间点。
内容的提问来源于stack exchange,提问作者blankslatecoder
相关产品推荐
相关产品推荐

