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

如何在Pandas DataFrame中统计重复行、去重并添加计数列?

解决分组统计重复次数同时保留其他列的问题

针对你的需求,这里有几种实用方案,能在统计重复次数(Quantity列)的同时保留Category、Brand_ID等其他列:

方案1:用transform直接在原DataFrame添加计数

先给原DataFrame添加全为1的Quantity列,然后用transform方法计算每组的总和,这样所有列都会保留,且每一行都会显示对应组的重复次数:

# 先添加全1的Quantity列
df['Quantity'] = 1
# 按Date和Product_ID分组,计算每组的Quantity总和并赋值回原列
df['Quantity'] = df.groupby(['Date', 'Product_ID'])['Quantity'].transform('sum')

这种方法会保留所有原始行,适合需要保留每条记录但同时显示对应组计数的场景。

方案2:分组聚合时指定其他列的保留规则

如果只需要每组保留一行(去重后),可以在agg方法里同时指定Quantity的求和规则,以及其他列的取值规则(比如取组内第一个值,前提是同一组内这些列的值一致):

df['Quantity'] = 1
# 分组聚合,指定各列的处理方式
result_df = df.groupby(['Date', 'Product_ID'], as_index=False).agg(
    Quantity=('Quantity', 'sum'),
    Category=('Category', 'first'),
    Brand_ID=('Brand_ID', 'first')
)

如果列比较多,可以用字典推导简化:

agg_dict = {'Quantity': 'sum'}
# 给其他列都设置取第一个值的规则
for col in df.columns:
    if col not in ['Date', 'Product_ID', 'Quantity']:
        agg_dict[col] = 'first'

result_df = df.groupby(['Date', 'Product_ID'], as_index=False).agg(agg_dict)

方案3:先统计计数再合并回原DataFrame

先单独统计每组的重复次数,再通过merge合并回原DataFrame,最后去重:

# 统计每组的重复次数
count_df = df.groupby(['Date', 'Product_ID']).size().reset_index(name='Quantity')
# 合并回原DataFrame
result_df = df.merge(count_df, on=['Date', 'Product_ID']).drop_duplicates(subset=['Date', 'Product_ID'])

这种方法不需要先添加全1的Quantity列,直接用size()统计次数。

注意事项

如果同一(Date, Product_ID)组内的Category、Brand_ID等列存在不同值,需要先确认业务规则(比如取哪个值),再选择对应的聚合方式(first/last/max等),或者先清洗数据确保组内这些列的值一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:05:25