Pandas按Groups分组新增first_Element列,取每组Value最小值对应首个Element
实现方法
你可以用pandas的分组聚合功能实现,核心是利用idxmin()方法获取每个分组内第一个出现的Value最小值对应的行索引,具体步骤如下:
步骤1:构造测试数据(你已有数据可跳过)
import pandas as pd df = pd.DataFrame({ 'Groups': ['G1', 'G1', 'G1', 'G2', 'G2', 'G3', 'G3', 'G3', 'G3'], 'Value': [1, 4, 6, 2, 1, 7, 4, 2, 2], 'Element': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'] })
步骤2:生成新列
方法1:分组取最小索引+映射实现(性能最优)
# 取每个分组第一个Value最小值对应的行索引 min_value_idx = df.groupby('Groups')['Value'].idxmin() # 生成分组到对应Element的映射关系 group_element_map = df.loc[min_value_idx].set_index('Groups')['Element'] # 映射生成新列 df['first_Element'] = df['Groups'].map(group_element_map)
方法2:用transform直接生成(写法更简洁)
df['first_Element'] = df.groupby('Groups')['Value'].transform( lambda x: df.loc[x.idxmin(), 'Element'] )
说明
pandas的idxmin()方法默认返回序列中第一个出现的最小值对应的行索引,天然匹配你「多个最小值取第一个出现的Element」的需求,最终输出和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者chippycentra
相关产品推荐
相关产品推荐

