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

如何在Python Pandas中将两个DataFrame绘制到同一个柱状图中

解决方案

实现思路

保留你原有的统计逻辑,通过给两个DataFrame添加类别标识,合并后统一处理,最终生成组合柱状图。核心是把两组数据归到同一数据集里,用分组统计实现批量计算,再调整格式适配组合图绘制。

完整代码

import pandas as pd
import matplotlib.pyplot as plt

# 原始DataFrame
df1 = pd.DataFrame({'URL': ['A','B','C'],
                    'X': [1,0,1],
                    'Y': [0,1,0],
                    'Z':[1,0,0]})

df2 = pd.DataFrame({'URL': ['D','E','F'],
                    'X': [0,1,0],
                    'Y': [1,0,0],
                    'Z':[1,0,0]})

# 给两组数据添加类别标识
df1['category'] = 'Non_Tracking_websites'
df2['category'] = 'Tracking_websites'

# 合并两个DataFrame
combined_df = pd.concat([df1, df2], ignore_index=True)

# 按原有逻辑统计,同时按变量和类别分组
result = combined_df.melt(id_vars=["URL", "category"]) \
                    .groupby(["variable", "category"]) \
                    .agg(count=("value", lambda x: sum(x != 0))) \
                    .unstack()  # 将类别转为列,适配组合柱状图格式

# 绘制组合柱状图
result.plot(kind="bar", figsize=(8, 5))
plt.title("Tracking vs Non-Tracking Websites by Variable")
plt.xlabel("Variables (X/Y/Z)")
plt.ylabel("Number of Websites")
plt.legend(title="Website Category")
plt.show()

关键步骤说明

  • 添加category列:用来区分两组数据,是合并后分组统计的核心标识
  • pd.concat:将两个DataFrame纵向合并,避免重复编写统计逻辑
  • unstack():把分组后的category从行索引转为列,让plot自动生成每个变量对应的双柱子(非追踪/追踪)
  • 最后通过基础配置优化图表可读性,比如标题、坐标轴标签等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:25:19