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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:02:27