技术需求:按指定列统计重复数并保留其他列的首个重复行(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
相关产品推荐
相关产品推荐

