Python中按指定列分组为序列值生成计数标识的实现问题
问题原因
你的代码存在两个核心错误:
- 没有先按规则生成分组内的递增计数,直接尝试拼接不符合预期的列位置值,触发类型错误
df[0]、df[1]是按位置索引取列,和你实际的列名、计数逻辑完全不匹配,属于逻辑错误
可行解决代码
import pandas as pd # 构造示例数据集,你可以替换为自己的df读取逻辑 df = pd.DataFrame([ ["aa", "q1 23", "hi"], ["aa", "q1 23", "hi"], ["aa", "q1 23", "bye"], ["aa", "q1 23", "bye"], ["aa", "q2 23", "hi"], ["aa", "q2 23", "bye"], ["bb", "q1 23", "hi"] ], columns=["id", "date", "type"]) # 核心计算逻辑 df['count'] = df['type'] + df.groupby(['id', 'date', 'type']).cumcount().add(1).astype(str).str.zfill(2) # 输出验证 print(df)
逻辑说明
- 分组键设置为
['id', 'date', 'type'],保证每一组都是同一个id、同一个date下的同类型数据,计数在组内自动重置 cumcount()生成组内从0开始的递增序号,add(1)调整为从1开始计数,符合01、02的计数要求- 先将数字序号转为字符串,再调用
zfill(2)补前导零到2位,最后和type列拼接得到最终的count列值
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

