基于City与ID列筛选对应最大值行的DataFrame处理问题
解决DataFrame按City+ID分组保留Value最大值行的问题
需求说明
给定包含City、ID、Value三列的DataFrame,需对City和ID值完全相同的记录组,仅保留Value列数值最大的行,删除同组内Value较小的行。
示例输入
| City | ID | Value |
|---|---|---|
| London | 1 | 12.45 |
| Amsterdam | 1 | 14.56 |
| Paris | 1 | 16.89 |
| New York | 1 | 23.86 |
| Chicago | 1 | 14.56 |
| Chicago | 1 | 20.76 |
解决方案
使用Pandas的groupby结合idxmax()可高效实现需求,代码如下:
import pandas as pd # 构造示例数据(替换为你的实际DataFrame即可) df = pd.DataFrame({ 'City': ['London', 'Amsterdam', 'Paris', 'New York', 'Chicago', 'Chicago'], 'ID': [1, 1, 1, 1, 1, 1], 'Value': [12.45, 14.56, 16.89, 23.86, 14.56, 20.76] }) # 按City和ID分组,获取每组Value最大值对应的行索引 max_row_indices = df.groupby(['City', 'ID'])['Value'].idxmax() # 筛选出目标行 filtered_df = df.loc[max_row_indices].reset_index(drop=True) print(filtered_df)
扩展说明
如果同一City+ID组内存在多个行的Value等于最大值(即最大值不唯一),上述方法会仅保留第一个出现的最大值行。若需要保留所有最大值行,可使用transform方法:
# 保留同组内所有Value等于最大值的行 filtered_df = df[df['Value'] == df.groupby(['City', 'ID'])['Value'].transform('max')]
预期输出
| City | ID | Value |
|---|---|---|
| London | 1 | 12.45 |
| Amsterdam | 1 | 14.56 |
| Paris | 1 | 16.89 |
| New York | 1 | 23.86 |
| Chicago | 1 | 20.76 |
内容的提问来源于stack exchange,提问作者Vivek Sukhala
相关产品推荐
相关产品推荐

