如何在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
相关产品推荐
相关产品推荐

