You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Pandas DataFrame指定列的重复项添加计数列?

解决Pandas DataFrame第一列重复项统计并添加count列的问题

嘿,我来帮你搞定这个需求!首先得提一句:Pandas的核心优势是向量化操作,逐行遍历其实效率很低(尤其是数据量大的时候),所以先给你推荐高效的分组聚合方法,同时也会提供满足你“逐行遍历”要求的实现,你可以根据场景选择~

假设你的原始DataFrame长这样(我模拟了一个示例):

import pandas as pd
df = pd.DataFrame({
    'col1': ['A', 'B', 'A', 'C', 'B', 'A'],
    'col2': [10, 20, 30, 40, 50, 60],
    'col3': ['x', 'y', 'z', 'm', 'n', 'p']
})

方法一:推荐用Pandas分组聚合(高效简洁)

这个方法完全不用逐行遍历,利用Pandas内置的分组功能,几行代码就能搞定:

# 第一步:给DataFrame最后一列添加count,初始值全为1
df['count'] = 1

# 第二步:按第一列分组,统计count的总和;其他列你说无需关注,这里取每组的第一个值
result_df = df.groupby(df.columns[0], as_index=False).agg(
    **{col: 'first' for col in df.columns[:-1]},  # 其他列取第一个值
    count='sum'  # count列求和
)

# 保持列顺序和原始一致(确保count在最后)
cols = list(result_df.columns[:-1]) + ['count']
result_df = result_df[cols]

运行后得到的result_df就是你要的简化结果:第一列每个唯一值只出现一次,count列是该值的重复次数,其他列保留首次出现的内容。

方法二:逐行遍历实现(满足你的遍历要求)

如果你因为特殊原因必须逐行处理,那可以用字典记录第一列值的首次出现位置,然后累加count,最后删除重复行:

import pandas as pd

# 示例DataFrame(和上面一样)
df = pd.DataFrame({
    'col1': ['A', 'B', 'A', 'C', 'B', 'A'],
    'col2': [10, 20, 30, 40, 50, 60],
    'col3': ['x', 'y', 'z', 'm', 'n', 'p']
})

# 先添加count列,初始值全为1
df['count'] = 1

# 用字典记录第一列每个值的首次出现行索引
seen = {}

# 逐行遍历处理
for idx, row in df.iterrows():
    current_key = row[df.columns[0]]  # 取第一列的当前值
    if current_key not in seen:
        # 首次出现,记录这个行的索引
        seen[current_key] = idx
    else:
        # 重复出现,把首次出现行的count加1,当前行标记为待删除
        df.at[seen[current_key], 'count'] += 1
        df.at[idx, 'count'] = 0  # 标记为要删除的行

# 过滤掉标记为0的行,重置索引
result_df = df[df['count'] != 0].reset_index(drop=True)

这个方法的逻辑完全符合你说的“逐行遍历,首次出现时记录,重复时累加count”,最终结果和方法一一致。

小提醒

如果你的DataFrame数据量很大(比如几万行以上),强烈推荐用方法一,逐行遍历的速度会慢很多;如果数据量小,两种方法都可以~

内容的提问来源于stack exchange,提问作者Ivo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:25:09