基于Pandas绘制多DataFrame对应系统的唯一ID总和分组柱状图求助
实现方案
步骤1:计算各系统的UniqueIDs唯一值总数
先针对每个DataFrame,统计UniqueIDs列去重后的总数:
import pandas as pd # 计算每个系统的UniqueIDs唯一值数量 sys1_unique_count = df1['UniqueIDs'].nunique() sys2_unique_count = df2['UniqueIDs'].nunique() sys3_unique_count = df3['UniqueIDs'].nunique()
步骤2:整理统计数据
把系统名称和对应的统计结果整理成新的DataFrame,方便后续绘图:
# 构建统计用DataFrame stats_data = pd.DataFrame({ '系统类型': ['系统1', '系统2', '系统3'], '唯一ID总数': [sys1_unique_count, sys2_unique_count, sys3_unique_count] })
步骤3:绘制分组柱状图
以下提供两种常用实现方案:
方案A:使用Matplotlib绘制
import matplotlib.pyplot as plt # 设置画布尺寸 plt.figure(figsize=(8, 5)) # 绘制柱状图 bars = plt.bar(stats_data['系统类型'], stats_data['唯一ID总数'], color=['#1f77b4', '#ff7f0e', '#2ca02c']) # 给每个柱子添加数值标签 for bar in bars: bar_height = bar.get_height() plt.text(bar.get_x() + bar.get_width()/2, bar_height, f'{bar_height}', ha='center', va='bottom', fontsize=10) # 设置图表标签与标题 plt.xlabel('系统类型', fontsize=12) plt.ylabel('UniqueIDs唯一值总数', fontsize=12) plt.title('各系统UniqueIDs唯一值数量对比', fontsize=14) # 自动调整布局 plt.tight_layout() plt.show()
方案B:使用Seaborn绘制(样式更美观)
import seaborn as sns # 设置画布尺寸 plt.figure(figsize=(8, 5)) # 绘制柱状图 sns.barplot(x='系统类型', y='唯一ID总数', data=stats_data, palette='viridis') # 添加数值标签 for patch in plt.gca().patches: height = patch.get_height() plt.gca().text(patch.get_x() + patch.get_width()/2, height, f'{int(height)}', ha='center', va='bottom', fontsize=10) # 设置图表标签与标题 plt.xlabel('系统类型', fontsize=12) plt.ylabel('UniqueIDs唯一值总数', fontsize=12) plt.title('各系统UniqueIDs唯一值数量对比', fontsize=14) plt.tight_layout() plt.show()
补充:按Process/Activity分组的进阶绘图
如果需要按Process或Activity维度分组(每个分组下展示三个系统的柱子),可以按以下方式实现:
# 合并三个DataFrame并标记系统类型 df1['系统类型'] = '系统1' df2['系统类型'] = '系统2' df3['系统类型'] = '系统3' merged_df = pd.concat([df1, df2, df3], ignore_index=True) # 按分组维度统计UniqueIDs唯一值数量 grouped_stats = merged_df.groupby(['Process', '系统类型'])['UniqueIDs'].nunique().reset_index() # 绘制分组柱状图 plt.figure(figsize=(12, 6)) sns.barplot(x='Process', y='UniqueIDs', hue='系统类型', data=grouped_stats, palette='viridis') plt.xlabel('流程类型', fontsize=12) plt.ylabel('UniqueIDs唯一值总数', fontsize=12) plt.title('各流程下不同系统的UniqueIDs唯一值数量对比', fontsize=14) plt.legend(title='系统类型') plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者user21756594
相关产品推荐
相关产品推荐

