Python/Pandas中出现新地址行时重置计数列的实现及注意事项
实现Pandas按地址分组重置计数的方法
核心实现逻辑
你可以通过groupby搭配cumcount方法实现需求,假设你的DataFrame中存储地址的列名为address,若实际列名不同可自行替换:
# 按地址分组,每组内按行出现顺序从1开始生成计数列 df['Epoch'] = df.groupby('address', sort=False).cumcount() + 1
cumcount默认从0开始返回分组内的行序号,加1后即可满足从1开始计数的要求。sort=False参数用于保留原始数据的行顺序,避免pandas默认对分组地址排序打乱原有记录的先后。
构造DataFrame的注意事项
- 相同地址是否需要集中存放:取决于你的计数规则:
- 若要按照原始数据的行出现顺序计数(同一个地址的行分散在不同位置时,每出现一次计数加1,中间穿插其他地址的记录不会重置该地址的计数),则不需要提前集中相同地址的行,直接运行上述代码即可。
- 若要求同一个地址的所有行计数连续,不会被其他地址的行打断,则需要先将相同地址的行排序集中后,再执行计数逻辑。
- 地址列的数据类型需要保持统一,避免出现字符串、其他类型混合的情况,否则会被
groupby识别为不同分组,导致计数错误。 - 若不需要对空地址计数,建议提前用
df = df.dropna(subset=['address'])过滤地址为空的行,避免空值单独成组生成无效计数。 - 若要严格保留原始数据的行顺序,必须在
groupby中添加sort=False参数,pandas默认groupby会对分组键做升序排序,会改变原有行的先后顺序。
内容的提问来源于stack exchange,提问作者Luiz Scheuer
相关产品推荐
相关产品推荐

