在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。
代码解析与优化
你的代码逻辑完全正确,核心步骤拆解:
- 按账户统计设备数:
df.groupby("Account_ID")["Device_ID"].nunique()按账户分组,计算每个账户关联的唯一设备数,结果为:Account_ID ABC123 1 EFG456 2 HIJ789 1 Name: Device_ID, dtype: int64 - 统计设备数对应的账户量:
.value_counts()统计上述结果中,每个设备数对应的账户数量,得到:1 2 2 1 Name: Device_ID, dtype: int64 - 绘制柱状图:
.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
相关产品推荐
相关产品推荐

