Pandas如何基于分类列关联两个DataFrame求各分类最大值新增列
实现方法
无需逐行遍历DF2做匹配计算,通过「分类标签对齐+分组聚合+表关联」的方式即可高效完成需求,具体步骤如下:
- 对齐分类标签:完全复用生成DF2时的分类转换规则(如
pd.cut/pd.qcut分箱、自定义阈值判断等),在原始表DF1上生成与DF2同名的分类列,保证两边分类值完全对应。 - 分组聚合统计:对DF1按分类列分组,直接计算剩余6个float列的最大值,得到以分类值为索引的聚合结果集。
- 结果关联合并:以DF2的分类列为关联键,左连接聚合结果集,即可将6个最大值列批量添加到DF2中。
参考代码
假设用于生成分类的原始列为DF1的src_col,待统计最大值的6个float列为f1~f6,DF2中存储分类值的列名为cat_col:
import pandas as pd # 1. 为DF1添加分类列,所有参数必须与生成DF2时的规则完全一致 # 以下为pd.cut分箱示例,替换为实际使用的分类逻辑即可 DF1['cat_col'] = pd.cut( DF1['src_col'], bins=[-float('inf'), 10, 25, 50, float('inf')], labels=['<10', '10-25', '25-50', '>50'] ) # 2. 按分类分组计算6列最大值,列名加_max后缀便于识别 agg_df = DF1.groupby('cat_col')[['f1','f2','f3','f4','f5','f6']].max().add_suffix('_max') # 3. 合并结果到DF2 DF2 = DF2.merge(agg_df, left_on='cat_col', right_index=True, how='left')
注意:分类转换规则必须完全匹配,包括分箱边界的开闭规则、空值处理逻辑、分类标签命名,否则会出现分类匹配失败、统计值错位的问题。如果DF2中存储了生成分类时的参数,直接复用参数即可,不要手动重复硬编码阈值。
内容的提问来源于stack exchange,提问作者Dushyant Sapre
相关产品推荐
相关产品推荐

