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

在Python中绘制唯一值计数图:账户与关联设备数量统计

账户-设备关联统计可视化:问题与解决

需求背景

给定如下DataFrame:

Time                  Account_ID   Device_ID  Zip_Code
0  2011-02-02 12:02:19   ABC123       A12345     83420
1  2011-02-02 13:35:12   EFG456       B98765     37865
2  2011-02-02 13:54:57   EFG456       B98765     37865
3  2011-02-02 14:45:20   EFG456       C24568     37865
4  2011-02-02 15:08:58   ABC123       A12345     83420
5  2011-02-02 15:25:17   HIJ789       G97352     97452

需要绘制柱状图:

  • X轴:单个Account_ID关联的唯一Device_ID数量
  • Y轴:对应X轴数值的唯一Account_ID计数

预期效果:X轴为1时Y值为2(ABC123和HIJ789各关联1个设备);X轴为2时Y值为1(EFG456关联2个设备)。

已尝试代码

df.groupby("Account_ID")["Device_ID"].nunique().value_counts().plot.bar()

执行后生成的柱状图已符合预期:X轴1对应高度2,X轴2对应高度1。

代码解析与优化

你的代码逻辑完全正确,核心步骤拆解:

  1. 按账户统计设备数:df.groupby("Account_ID")["Device_ID"].nunique() 按账户分组,计算每个账户关联的唯一设备数,结果为:
    Account_ID
    ABC123    1
    EFG456    2
    HIJ789    1
    Name: Device_ID, dtype: int64
    
  2. 统计设备数对应的账户量:.value_counts() 统计上述结果中,每个设备数对应的账户数量,得到:
    1    2
    2    1
    Name: Device_ID, dtype: int64
    
  3. 绘制柱状图:.plot.bar() 将统计结果可视化,完全匹配需求。

如果需要提升图表可读性,可添加坐标轴标签、标题并优化X轴显示:

import matplotlib.pyplot as plt

# 分步执行统计,便于理解
device_count_per_account = df.groupby("Account_ID")["Device_ID"].nunique()
account_distribution = device_count_per_account.value_counts().sort_index()

# 绘图并美化
account_distribution.plot.bar(rot=0)  # rot=0 让X轴标签水平显示
plt.xlabel("单个账户关联的唯一设备数")
plt.ylabel("账户数量")
plt.title("账户-设备关联数量分布")
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:05:22