去重Client Number列时如何保留正确的Call Count值?
解决方案
问题根源
你之前的代码有两个关键错误:
cumcount()是给每组内的行生成递增序号(从0开始),加1后会变成1、2、3...,这不是统计每组的总呼叫次数,所以Call Count值完全错了。drop_duplicates(subset=["Client Number"], keep=False)会删除所有存在重复的客户行(比如Bob的所有记录都会被删掉),而不是保留唯一的客户条目。
正确实现方式
方式1:先统计正确次数,再生成去重结果
如果还没完成呼叫次数的正确统计,直接用分组统计生成唯一客户的结果:
# 统计每个客户的总呼叫次数,生成去重后的DataFrame call_count_result = df1.groupby('Client Number').size().reset_index(name='Call Count')
方式2:基于已有正确数据去重
如果你的原DataFrame里,同一客户的Call Count已经是正确的总数(比如示例里Bob的Call Count全是3),直接去重时保留任意一行即可:
# 保留每个客户的第一行,Call Count自然是正确值 df2 = df1.drop_duplicates(subset=["Client Number"], keep='first') # 也可以保留最后一行,效果一样 # df2 = df1.drop_duplicates(subset=["Client Number"], keep='last')
方式3:用聚合函数确保数据准确性
如果担心原数据里同一客户的Call Count可能存在不一致,用聚合函数取最大值/平均值(正确情况下同一客户的Call Count应该相同):
df2 = df1.groupby('Client Number').agg({'Call Count': 'max'}).reset_index()
最终效果
以上任意一种方法都会得到你想要的正确结果:
| Client Number | Call Count |
|---|---|
| Bob | 3 |
| John | 1 |
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

