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

技术需求:按指定列统计重复数并保留其他列的首个重复行(Pandas)

问题:统计指定列重复次数并保留其他列首行值

需求说明

统计指定子列(示例中为x1、x2)的重复数量,同时保留其他列(示例中为x3)的数据,取重复组第一行对应值。

原代码

import re
import pandas as pd

data = [
    ['A','B','C'],
    ['A','B','D'],
    ['A','D','C'],
    ['A','D','C']
]

df = pd.DataFrame(data,columns=['x1','x2','x3'])
print(df)

df1 = df.groupby(['x1','x2']).size().reset_index()
print(df1)

当前输出

x1 x2 x3
0  A  B  C
1  A  B  D
2  A  D  C
3  A  D  C

  x1 x2  0
0  A  B  2
1  A  D  2

期望输出

x1 x2 x3  0
0  A  B  C  2
1  A  D  C  2

解决方案

方法1:单次groupby结合agg直接完成

通过agg方法同时指定x3取每组第一个值,并统计重复次数:

import pandas as pd

data = [
    ['A','B','C'],
    ['A','B','D'],
    ['A','D','C'],
    ['A','D','C']
]

df = pd.DataFrame(data,columns=['x1','x2','x3'])
print(df)

# 用agg同时处理列值提取和计数
df1 = df.groupby(['x1','x2']).agg(
    x3=('x3', 'first'),
    **{'0': ('x1', 'size')}
).reset_index()
print(df1)

方法2:拆分操作后合并结果

先提取每组首行数据,再统计重复次数,最后合并两个结果:

import pandas as pd

data = [
    ['A','B','C'],
    ['A','B','D'],
    ['A','D','C'],
    ['A','D','C']
]

df = pd.DataFrame(data,columns=['x1','x2','x3'])
print(df)

# 获取每组首行数据
first_rows = df.groupby(['x1','x2']).first().reset_index()
# 统计重复次数
counts = df.groupby(['x1','x2']).size().reset_index(name='0')
# 合并结果
df1 = pd.merge(first_rows, counts, on=['x1','x2'])
print(df1)

两种方法都能得到符合预期的输出,方法1更简洁高效,适合直接处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:22:15