如何在Pandas中按site分组提取temp列最大值对应的行?
问题:按site分组提取temp最大值对应的行
示例DataFrame:
site temp month day A 15 7 18 A 11 6 12 A 22 9 3 B 9 4 23 B 3 2 11 B -1 5 18
需要输出每个site对应temp列最大值所在的行,预期结果:
site temp month day A 22 9 3 B 9 4 23
尝试以下代码后得到错误结果(输出全局最大值22重复两次):
for i in DF['site'].unique(): print(DF.temp.max())
解决方案
错误原因
你的代码每次循环都直接调用DF.temp.max(),这是计算整个DataFrame的temp全局最大值,没有针对当前循环的site筛选数据,所以会重复输出全局最大值22。
方法1:groupby + idxmax(推荐)
通过分组找到每个site组内temp最大值的索引,再提取对应行:
# 获取每个site组内temp最大值的行索引 max_indices = DF.groupby('site')['temp'].idxmax() # 根据索引提取目标行 result = DF.loc[max_indices] print(result)
方法2:transform 筛选
用transform生成每个组的最大值列,再匹配筛选:
# 为每行生成其所在site组的temp最大值 group_temp_max = DF.groupby('site')['temp'].transform('max') # 筛选temp等于组内最大值的行 result = DF[DF['temp'] == group_temp_max] print(result)
方法3:改进循环(不推荐,大数据集效率低)
如果坚持用循环,每次需先筛选当前site的子数据集:
for site in DF['site'].unique(): site_subset = DF[DF['site'] == site] max_row = site_subset[site_subset['temp'] == site_subset['temp'].max()] print(max_row)
内容的提问来源于stack exchange,提问作者user2100039
相关产品推荐
相关产品推荐

