如何获取pandas分组后每组压力值Top2对应的Date/Time列数据
解决方案
你要实现的是按group字段分组后,提取每组压力最高的2条记录的所有信息(包含对应时间戳),可以直接使用以下两种方案实现:
方案1:直接对分组整体取Top N行(最简洁)
不需要单独提取压力列再匹配时间戳,直接对每个分组的全量数据按压力列取前2大值,自动保留所有原始字段:
# 按group分组,每组取Pressure最高的2行,保留全部列(包含Date/Time) df_top2 = df.groupby('group', group_keys=False).apply(lambda x: x.nlargest(2, 'Pressure')).reset_index(drop=True)
执行后得到的df_top2中就包含你需要的分组、时间戳、压力值三个核心字段,可以直接导出到新工作表。
方案2:基于你已有的行索引匹配时间戳
如果你已经运行了第一段代码拿到了带原行索引的压力Top2结果,可以直接用索引匹配原表的时间戳:
# 你已有的代码,拿到分组+原行号为索引的压力Top2结果 df_pressure_top2 = df.groupby('group')['Pressure'].nlargest(2).rename_axis(index=['group','row_index']) # 用原行号索引匹配原表的所有字段 df_top2 = df.loc[df_pressure_top2.index.get_level_values('row_index')]
补充说明
如果存在多条压力值相同的记录,nlargest会默认按数据出现的顺序取前2条,如果你需要按时间戳等其他规则处理并列情况,可以在nlargest前增加排序逻辑,比如先按压力降序、再按时间升序排列后取前2:
df_top2 = df.groupby('group', group_keys=False).apply( lambda x: x.sort_values(['Pressure', 'Date/Time'], ascending=[False, True]).head(2) ).reset_index(drop=True)
你待提取的样例数据结构参考:
内容的提问来源于stack exchange,提问作者scoulter
相关产品推荐
相关产品推荐

