Pandas按age分组取net_worth最大值并保留对应name列的方法
解决按年龄分组提取对应最高净资产富豪的问题
下面提供几种可行的方法,帮你在按age分组后,同时保留每组最高net_worth对应的name:
方法一:使用idxmax() + loc提取目标行
通过idxmax()找到每个年龄组中净资产最高的行索引,再用loc提取对应数据,直接保留所需列:
# 获取每个年龄组净资产最高的行的索引 max_worth_indices = df.groupby('age')['net_worth'].idxmax() # 根据索引提取包含age、name、net_worth的目标数据 result_df = df.loc[max_worth_indices, ['age', 'name', 'net_worth']] # 可选:重置索引让结果更整洁 result_df = result_df.reset_index(drop=True)
方法二:用transform()标记并筛选
先给原数据添加一列,标记当前年龄组的净资产最大值,再筛选出符合条件的行:
# 为每行标记所属年龄组的净资产最大值 df['group_max_net_worth'] = df.groupby('age')['net_worth'].transform('max') # 筛选出净资产等于组内最大值的行,保留需要的列 result_df = df[df['net_worth'] == df['group_max_net_worth']][['age', 'name', 'net_worth']] # 可选:重置索引 result_df = result_df.reset_index(drop=True)
方法三:通过groupby().apply()自定义处理
对每个年龄组应用自定义函数,直接返回组内净资产最高的行:
def extract_max_worth_row(group): # 返回组内净资产最大的行 return group[group['net_worth'] == group['net_worth'].max()] # 应用函数并整理结果 result_df = df.groupby('age').apply(extract_max_worth_row).reset_index(drop=True)
注意事项
如果同一个年龄组存在多位富豪净资产相同且均为组内最大值,上述方法会保留所有符合条件的行。若仅需每组一行,可在方法一的结果上使用drop_duplicates(subset='age')去重。
内容的提问来源于stack exchange,提问作者RomTurino
相关产品推荐
相关产品推荐

