如何使用pandas的groupby函数按test1列分组生成序列编号列Number
可以用pandas的groupby实现这个需求,核心使用分组对象的cumcount()方法即可快速完成,操作非常简单:
核心代码
# 从1开始生成分组内顺序编号,赋值给新的Number列 df['Number'] = df.groupby('test1').cumcount() + 1
cumcount()默认会按照分组内原始数据的顺序,从0开始生成递增序号,加1就可以得到从1开始的常规编号。
完整可运行示例
你可以直接运行下面的代码看效果,替换成自己的数据源即可:
import pandas as pd # 模拟和你截图结构一致的示例数据 df = pd.DataFrame({ 'test1': ['a', 'a', 'b', 'b', 'b', 'c'], 'value': [23, 45, 12, 78, 56, 99] }) # 生成Number列 df['Number'] = df.groupby('test1').cumcount() + 1 print(df)
运行后输出结果:
test1 value Number 0 a 23 1 1 a 45 2 2 b 12 1 3 b 78 2 4 b 56 3 5 c 99 1
补充说明
如果你需要先按某列排序后再生成序号,可以先做排序操作再生成编号,比如要按value列从小到大排序后再分组生成序号:
df = df.sort_values(['test1', 'value'], ascending=True) df['Number'] = df.groupby('test1').cumcount() + 1
内容的提问来源于stack exchange,提问作者Chrisyu50d
相关产品推荐
相关产品推荐

