如何按日期绘制图表,展示每日Is_Correct列False值的占比?
实现每日Is_Correct=False值的占比计算与可视化
1. 准备示例数据
用pandas创建你提供的DataFrame:
import pandas as pd data = { 'Date': ['2023-06-01', '2023-06-01', '2023-06-02', '2023-06-02', '2023-06-02'], 'ID': [1, 1, 2, 2, 2], 'Count': [12, 1, 15, 10, 1], 'Is_Correct': [True, False, True, True, False] } df = pd.DataFrame(data)
2. 按日期和Is_Correct分组聚合Count总和
使用groupby按Date和Is_Correct分组,对Count列求和,得到你需要的中间结果:
grouped_df = df.groupby(['Date', 'Is_Correct'])['Count'].sum().reset_index()
执行后grouped_df的结果如下:
| Date | Is_Correct | Count |
|---|---|---|
| 2023-06-01 | False | 1 |
| 2023-06-01 | True | 12 |
| 2023-06-02 | False | 1 |
| 2023-06-02 | True | 25 |
3. 计算每日False值的占比
先计算每个日期的总Count,再推导False值的占比:
# 计算每日总Count daily_total = grouped_df.groupby('Date')['Count'].sum().reset_index(name='Total_Count') # 合并总Count到分组数据 merged_df = pd.merge(grouped_df, daily_total, on='Date') # 筛选Is_Correct=False的行,计算占比 false_ratio = merged_df[merged_df['Is_Correct'] == False].copy() false_ratio['False_Ratio'] = false_ratio['Count'] / false_ratio['Total_Count']
最终false_ratio的结果:
| Date | Is_Correct | Count | Total_Count | False_Ratio |
|---|---|---|---|---|
| 2023-06-01 | False | 1 | 13 | ~0.0769 |
| 2023-06-02 | False | 1 | 26 | ~0.0385 |
4. 可视化每日False值占比
用matplotlib绘制柱状图展示占比:
import matplotlib.pyplot as plt plt.figure(figsize=(8, 5)) plt.bar(false_ratio['Date'], false_ratio['False_Ratio'], color='salmon') plt.title('每日Is_Correct=False值的占比') plt.xlabel('日期') plt.ylabel('False值占比') plt.ylim(0, max(false_ratio['False_Ratio']) * 1.2) # 调整y轴范围,提升可读性 # 在柱子上方标注具体百分比 for i, ratio in enumerate(false_ratio['False_Ratio']): plt.text(i, ratio + 0.005, f'{ratio:.2%}', ha='center') plt.show()
这段代码会生成柱状图,清晰展示每日False值的占比情况,同时标注具体百分比数值。
内容的提问来源于stack exchange,提问作者toy
相关产品推荐
相关产品推荐

