如何为pandas DataFrame中每个唯一ID绘制对应直方图
错误原因
plt.hist接口的作用是对输入的原始样本数据做频数分布统计,你的数据集已经提前聚合好了每个size对应的Count统计值,不需要再做二次频数统计,直接调用plt.hist不符合使用场景。- 原代码中直接将
size、Count两列传入plt.hist,接口会将两列都识别为待统计的原始样本,输出两个无关的分布统计结果,和需求不匹配。
解决代码
推荐用更适配场景的plt.bar实现,直接映射size到x轴、Count到柱高即可,代码如下:
import pandas as pd import matplotlib.pyplot as plt # 你的DataFrame构造逻辑 df = pd.DataFrame(data) # 按ID分组遍历 for group_id, group_df in df.groupby('ID'): plt.bar(x=group_df['size'], height=group_df['Count']) # 可选配置:添加标题和轴标签 plt.title(f'ID {group_id} 分布统计') plt.xlabel('size') plt.ylabel('Count') plt.show()
如果你一定要用plt.hist实现,可以通过weights参数传入Count作为权重,代码如下:
for group_id, group_df in df.groupby('ID'): plt.hist(x=group_df['size'], weights=group_df['Count'], bins=len(group_df['size'])) plt.title(f'ID {group_id} 分布统计') plt.xlabel('size') plt.ylabel('Count') plt.show()
内容的提问来源于stack exchange,提问作者Maurice500
相关产品推荐
相关产品推荐

