Python Pandas如何获取某列最大值关联行?统计线路最繁忙月份出错如何解决?
问题原因
你调用groupby.max()时,会对分组后的所有数值列分别独立计算最大值:Numtrips列确实取到了该线路的最大客运量,但BusiestMonth列也被单独取了该线路所有月份的最大值,12是月份的最大可能值,因此所有线路的返回结果都固定为12,和客运量最大值对应的月份完全没有关联。
修正方案
你需要先找到每个线路中客运量最高的整行数据,再提取对应的月份字段,常见实现方式如下:
import pandas as pd df = pd.read_csv("data.csv") # 方法1:按客运量降序排序后,分组取每组第一条数据(即客运量最高的行) df = df.sort_values('PassengerTrips', ascending=False)\ .groupby(['City1', 'City2'], as_index=False)\ .first() # 重命名列并保留需要的字段 df = df.rename(columns={'MonthNum': 'BusiestMonth', 'PassengerTrips': 'Numtrips'}) df = df[['City1', 'City2', 'BusiestMonth', 'Numtrips']] print('Each routes busiest month:') print(df)
如果你的数据量较大,也可以用idxmax直接定位每组最大值的行索引,性能更高:
import pandas as pd df = pd.read_csv("data.csv") # 定位每组客运量最大值的行索引 max_trip_idx = df.groupby(['City1', 'City2'])['PassengerTrips'].idxmax() # 筛选对应行 df = df.loc[max_trip_idx] # 后续重命名、筛选列逻辑同上 df = df.rename(columns={'MonthNum': 'BusiestMonth', 'PassengerTrips': 'Numtrips'}) df = df[['City1', 'City2', 'BusiestMonth', 'Numtrips']].reset_index(drop=True) print('Each routes busiest month:') print(df)
内容的提问来源于stack exchange,提问作者SQL Learner 1
相关产品推荐
相关产品推荐

