如何在Pandas DataFrame中按ID和Date分组对type生成增量计数
解决Pandas按ID和Date分组生成type递增编号的问题
问题分析
你原代码的问题在于groupby([*df])是将所有列作为分组键,这会导致每一行单独成为一个分组,cumcount()返回的始终是0,加1后固定为1,所以每个NEW字段都是type+01,无法实现按ID和Date分组内的递增编号。
正确解决方案
需要按ID、Date、type这三个字段分组,在每个分组内对行进行计数,再将计数格式化为两位数字后与type拼接:
# 按ID、Date、type分组,生成递增编号并格式化 df['NEW'] = df['type'] + df.groupby(['ID', 'Date', 'type']).cumcount().add(1).astype(str).str.zfill(2)
验证结果
运行上述代码后,你的DataFrame会得到期望的结果:
ID Date type NEW AA Q1.21 hi hi01 AA Q1.21 hi hi02 AA Q1.21 hello hello01 AA Q1.21 ok ok01 AA Q1.21 ok ok02 AA Q1.21 ok ok03 AA Q2.21 hello hello01 AA Q2.21 hello hello02 BB Q1.21 hi hi01 BB Q1.21 hi hi02
补充说明
cumcount():在每个分组内从0开始对行进行连续计数add(1):将计数从0起始改为1起始,符合你的编号需求str.zfill(2):将数字字符串补零至两位,确保编号格式统一(如1→01,2→02)
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

