Pandas执行groupby后合并不同大小DataFrame且不增加行数的实现方法
问题原因
你直接关联聚合结果和原表时行数膨胀,是因为原表中同一个COD对应多条数据,关联后每条聚合记录会匹配到多条原表记录,导致行数变回原表量级。
根据你的数据特征(同一个COD对应的STATE、CITY固定,同一个[COD,TEC,SET]分组下STATE、CITY也完全一致),有两种简单的实现方案:
方案1:直接修改groupby逻辑(更高效)
将STATE、CITY加入分组键即可,因为同组内这两个字段值完全一致,不会改变分组数量和聚合结果,直接得到带字段的9行结果:
df_cut = ( df.groupby(["COD","TEC","SET", "STATE", "CITY"]) .AZIM .agg(lambda x: pd.Series.mode(x).max()) .reset_index() )
方案2:聚合后关联去重映射表
如果你不想修改原有聚合逻辑,可以先从原表提取COD和STATE、CITY的唯一对应关系,再和聚合结果关联,不会出现行数膨胀:
# 提取COD与STATE、CITY的唯一映射 cod_dim = df[["COD", "STATE", "CITY"]].drop_duplicates() # 关联得到最终结果,保持9行不变 df_result = df_cut.merge(cod_dim, on="COD", how="left")
内容的提问来源于stack exchange,提问作者Harry Jones
相关产品推荐
相关产品推荐

