如何给Pandas DataFrame添加列以枚举相同索引的行?
给带重复索引的Pandas DataFrame添加顺序枚举的
day列 嘿,刚好碰到过类似需求,用Pandas的groupby加cumcount()就能轻松实现你要的效果,而且完全符合从1开始计数的要求~
先明确你的需求和初始数据
你需要给变量df的DataFrame新增day列,对相同索引的行按顺序从1开始编号。
初始的DataFrame代码:
import pandas as pd df = pd.DataFrame(data=[['a1','b1'],['a2','b2'],['a3','b3'],['a4','b4']],columns=['a','b'],index=[9,9,12,14])
初始输出效果:
a b 9 a1 b1 9 a2 b2 12 a3 b3 14 a4 b4
你期望的最终结果:
day a b 9 1 a1 b1 9 2 a2 b2 12 1 a3 b3 14 1 a4 b4
直接上解决方案代码
# 核心:按索引分组后计数,加1转为从1开始 df['day'] = df.groupby(level=0).cumcount() + 1 # 可选:调整列顺序,把day列移到最前面(和你的示例对齐) df = df[['day', 'a', 'b']]
简单解释下原理
groupby(level=0):这里的level=0就是指按行索引分组,把所有索引相同的行归为一组。cumcount():这个方法会给每个分组内的行从0开始排序号,比如索引9的两行会得到0和1。+1:把0起始的计数改成1起始,正好对应你要的day列的编号逻辑。- 最后调整列顺序是可选操作,如果不需要改变原有列的位置,直接跳过就行。
运行完这段代码,你就能得到和你期望一模一样的DataFrame啦!
内容的提问来源于stack exchange,提问作者gabboshow
相关产品推荐
相关产品推荐

