如何用pandas.DataFrame.groupby.transform仅按物种取蓝色观测的最大瓣宽?
解决方案
针对需求:为每个物种仅基于蓝色观测值计算petal_width的最大值,并将该值分配给该物种的所有观测(包括红色),以下是两种简洁实现方式:
方法一:先计算蓝色最大值再合并
# 筛选蓝色观测,按物种分组计算petal_width最大值 blue_species_max = iris[iris['color'] == 'blue'].groupby('species')['petal_width'].max().reset_index(name='max_width') # 将最大值合并回原数据集,每个物种的所有行都匹配对应最大值 iris = iris.merge(blue_species_max, on='species', how='left')
方法二:使用transform结合条件筛选
# 按物种分组,在组内仅筛选蓝色观测的petal_width取最大值,广播到组内所有行 iris['max_width'] = iris.groupby('species')['petal_width'].transform( lambda group: group[iris.loc[group.index, 'color'] == 'blue'].max() )
说明
- 两种方法都能实现:同一物种的所有行(无论红色还是蓝色)都会被赋予该物种蓝色观测的
petal_width最大值。 - 方法一逻辑直观,适合数据量较大的场景;方法二代码更紧凑,一行完成赋值操作。
内容的提问来源于stack exchange,提问作者semblable
相关产品推荐
相关产品推荐

