Pandas执行pivot列转换时保留重复索引最后一条数据的实现方法
Pandas实现pivot保留最后一条记录的规范方案
Pandas原生pivot方法暂不支持keep参数,要实现重复索引+列分组下保留最后一条条目的需求,可通过分组取最后值+列展开的组合逻辑实现,完全符合Pandas开发规范:
核心实现代码
# 仅需在原有逻辑基础上替换pivot调用即可 pivot_keep_last = df.groupby([df.index, 'a']).last().unstack('a')
逻辑说明
groupby([df.index, 'a']):按行索引i和要转列的字段a做分组,相同i值、相同a取值的行会被分到同一组.last():取每个分组的最后一条记录,对应需求中的keep='last'效果,如果需要保留第一条可替换为.first().unstack('a'):将a字段的不同取值展开为列层级,最终输出结构和df.pivot(columns='a')完全一致,且重复分组的条目仅保留最后一条
备选实现方案
如果更习惯先做数据去重再调用pivot,也可以使用如下写法,效果完全一致:
pivot_keep_last = df.reset_index()\ .drop_duplicates(subset=['i', 'a'], keep='last')\ .set_index('i')\ .pivot(columns='a')
内容的提问来源于stack exchange,提问作者user3673
相关产品推荐
相关产品推荐

