如何按DataFrame重复索引分组并保留指定列最大值所在行
保留重复索引下指定列最大值对应的整行数据
要实现按重复索引分组,保留每个组内列"C"值最大的完整行,可以用以下两种简洁方法:
方法一:利用idxmax()定位后提取
先通过groupby找到每个索引组内列"C"最大值对应的行标签,再用loc提取整行数据:
# 获取每个索引组中C列最大值对应的行标签 max_row_labels = df.groupby(df.index)['C'].idxmax() # 提取对应整行数据 result_df = df.loc[max_row_labels]
也可以合并为一行代码:
result_df = df.loc[df.groupby(df.index)['C'].idxmax()]
方法二:用apply直接筛选分组内目标行
如果需要处理组内存在多个C列最大值的情况(比如想保留所有最大值行,或只取第一行),可以用apply:
# 保留组内所有C列最大值的行 result_df = df.groupby(df.index).apply(lambda group: group[group['C'] == group['C'].max()]) # 若只保留每个组内第一个C列最大值的行 result_df = df.groupby(df.index).apply(lambda group: group[group['C'] == group['C'].max()].iloc[0])
为什么你之前的方法不符合需求?
df.groupby(df.index).max():会对每个列单独提取最大值,导致不同行的字段被混合拼接,破坏了行数据的完整性。df.groupby(df.index)['C'].max():仅保留分组后C列的最大值,直接丢弃了其他列的信息。
内容的提问来源于stack exchange,提问作者DGMS89
相关产品推荐
相关产品推荐

