You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Pandas保留每个姓氏的最后Level2地点并转换表格?

用Pandas实现按姓氏保留最后一条Level2记录

实现步骤

假设你的数据存储在Pandas DataFrame df 中,包含姓氏(列名示例:Surname)、级别(列名示例:Level,值为Level1/Level2)及其他业务列,按以下步骤处理:

  1. 提取所有Level1记录
    直接筛选保留所有Level1的行:

    level1_rows = df[df['Level'] == 'Level1']
    
  2. 提取每个姓氏的最后一条Level2记录
    先筛选出所有Level2行,再按姓氏分组取每组最后一行:

    level2_last_rows = df[df['Level'] == 'Level2'].groupby('Surname').last().reset_index()
    
    • groupby('Surname'):按姓氏维度分组
    • .last():提取每组的最后一行数据
    • .reset_index():重置索引为普通列,避免合并时出现索引冲突
  3. 合并结果并整理顺序
    合并Level1全量行和Level2的最终行,再按姓氏排序保持分组逻辑:

    import pandas as pd
    
    result_df = pd.concat([level1_rows, level2_last_rows]).sort_values('Surname').reset_index(drop=True)
    

补充:保留原表行顺序的方案

如果需要严格遵循原表中记录的出现顺序(而非按姓氏排序),可以先给原表添加行号标记,再通过行号取每组Level2的最后一条:

df['row_num'] = range(len(df))
level1_rows = df[df['Level'] == 'Level1']
# 按姓氏分组,取每组行号最大的那一行(即原表中最后出现的Level2记录)
level2_last_rows = df[df['Level'] == 'Level2'].groupby('Surname').apply(lambda x: x.loc[x['row_num'].idxmax()]).reset_index(drop=True)
# 合并后按原行号排序,再删除行号列
result_df = pd.concat([level1_rows, level2_last_rows]).sort_values('row_num').drop('row_num', axis=1).reset_index(drop=True)

内容的提问来源于stack exchange,提问作者Vish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:55:23