Pandas groupby取最大值后如何追加原DataFrame对应lp_id列值
实现方案
方案1:一步提取分组最大值对应完整行(推荐)
不需要先单独计算最大值再合并,直接通过idxmax()获取每个分组内pct_access最大值对应的行索引,取出原表整行数据即可直接得到包含lp_id的完整结果:
df_engage_max = df_engage.loc[df_engage.groupby(['district_id', 'time'])['pct_access'].idxmax()].reset_index(drop=True)
该方案默认每个分组仅返回第一个出现的最大值对应的行,适合单分组内最大值唯一的场景。
方案2:基于已有max表匹配追加lp_id
如果你已经生成了仅包含三列的df_engage_max,可以通过多字段左连接匹配原表的lp_id字段:
df_engage_max = df_engage_max.merge( df_engage[['district_id', 'time', 'pct_access', 'lp_id']], on = ['district_id', 'time', 'pct_access'], how = 'left' )
注意:如果同一
district_id+time分组下存在多个行的pct_access同为最大值,合并后会返回所有对应lp_id的行,若只需保留一条,可在合并后追加.drop_duplicates(subset=['district_id', 'time'], keep='first')完成去重。
内容的提问来源于stack exchange,提问作者Ahmed Emad
相关产品推荐
相关产品推荐

