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

求助:如何基于Pandas DataFrame绘制类似PowerBI的合规率折线图

在Python中绘制PowerBI风格的Adesão折线图

步骤1:导入必要的库

我们需要用pandas处理数据,matplotlib实现折线图绘制:

import pandas as pd
import matplotlib.pyplot as plt

步骤2:加载/准备数据

如果你的数据存储在CSV或Excel文件中,用对应方法读取;这里先模拟一份带日期维度的示例数据(对应PowerBI折线图的X轴):

# 加载真实数据请替换为以下代码(根据文件类型选择):
# df = pd.read_csv("你的数据文件路径.csv")
# df = pd.read_excel("你的数据文件路径.xlsx")

# 模拟示例数据(包含日期和Ação列)
data = {
    "Data": pd.date_range(start="2024-01-01", periods=30, freq="D"),
    "Ação": ["Água e sabonete", "Fricção com álcool", "Outro", "Água e sabonete"] * 7 + ["Fricção com álcool", "Outro"]
}
df = pd.DataFrame(data)

步骤3:计算Adesão度量值

完全对应你PowerBI中的DAX逻辑,按折线图的维度(比如日期)分组,计算每个分组内目标动作的数量占总动作数的比值:

# 定义需要统计的目标动作类别
target_actions = ["Água e sabonete", "Fricção com álcool"]

# 按维度分组计算Adesão(若X轴是其他维度,替换groupby的参数即可)
df_adesao = df.groupby("Data").apply(
    lambda group: group[group["Ação"].isin(target_actions)].shape[0] / group["Ação"].shape[0]
).reset_index(name="Adesão")

# 处理除零情况(某分组无Ação数据时,占比设为0,对应DAX的DIVIDE容错逻辑)
df_adesao["Adesão"] = df_adesao["Adesão"].fillna(0)

步骤4:绘制折线图

用matplotlib实现和PowerBI风格一致的折线图:

# 设置图形大小
plt.figure(figsize=(10, 6))

# 绘制折线并添加标记点
plt.plot(df_adesao["Data"], df_adesao["Adesão"], marker='o', linestyle='-', color='#0078D4', linewidth=2)

# 添加标题和坐标轴标签
plt.title("Adesão ao Protocolo de Higiene", fontsize=14, pad=15)
plt.xlabel("Data", fontsize=12)
plt.ylabel("Proporção de Ações", fontsize=12)

# 旋转X轴标签避免重叠
plt.xticks(rotation=45, ha='right')

# 添加网格线增强可读性
plt.grid(True, alpha=0.3)

# 自动调整布局
plt.tight_layout()

# 显示图形
plt.show()

关键说明

  • 若折线图X轴不是日期(比如部门、班次),只需将groupby("Data")替换为groupby("你的维度列名")。
  • 确保target_actions中的字符串和数据中Ação列的取值完全匹配(注意重音等特殊字符)。
  • 除零处理逻辑和PowerBI的DIVIDE函数一致,避免无数据分组的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:40:28