如何使用Pandas按用户ID统计非空账号数量?
统计用户非空账号数量的正确实现方法
你的思路方向是对的,但原代码会生成多层列索引,不符合你想要的简洁输出格式。下面给你两种实用的正确实现方式:
方法一:直接分组统计并重命名列
这种方式最简洁,count()方法本身就会自动忽略NaN值:
result = data.groupby('UserID')['AccountNum'].count().reset_index(name='TotalAccNum')
- 先通过
groupby('UserID')['AccountNum']指定仅对AccountNum列按用户分组 count()统计每组的非空值数量reset_index(name='TotalAccNum')将分组后的索引转为普通列,并把统计结果列重命名为你需要的TotalAccNum
方法二:使用agg函数指定列名(Python 3.6+)
如果你更倾向于用agg方法,可以通过键值对的方式直接定义输出列名和聚合逻辑,避免多层索引:
result = data.groupby('UserID').agg(TotalAccNum=('AccountNum', 'count')).reset_index()
测试验证
用你提供的测试数据:
UserID AccountNum
A001 12345
A001 NaN
A001 56789
运行上述任意一种方法后,都会得到你期望的输出:
UserID TotalAccNum
A001 2
内容的提问来源于stack exchange,提问作者Amy Diana
相关产品推荐
相关产品推荐

