如何在pandas中将金额列数值按不同布尔标记列归属统计
pandas实现各分类标记总承付金额统计及绘图
步骤1:导入所需库
import pandas as pd import matplotlib.pyplot as plt
步骤2:读取原始数据
如果你的数据存储为csv格式,执行以下代码读取,其他格式可对应调整pandas读取方法:
df = pd.read_csv("你的数据文件路径.csv")
步骤3:计算各分类标记对应的总承付金额
无需手动输入所有标记列名,代码会自动识别所有标记列完成计算:
# 自动筛选出所有分类标记列(排除唯一标识和金额字段) flag_cols = [col for col in df.columns if col not in ["Unique_ID", "Dollars_Obligated"]] # 遍历每个标记列,统计值为Yes的行对应的总承付金额 res = [] for flag in flag_cols: # 自动处理空格、大小写差异,避免Yes/YES/yes不统一的问题 total_amount = df[df[flag].str.strip().str.upper() == "YES"]["Dollars_Obligated"].sum() res.append({"分类标记": flag, "总承付金额": total_amount}) res_df = pd.DataFrame(res)
你提供的示例数据执行后得到的结果如下,可用于验证逻辑正确性:
| 分类标记 | 总承付金额 |
|---|---|
| Veteran_Flag | 145768 |
| Woman_Owned_Flag | 824999 |
步骤4:绘制柱状图
# 设置画布大小,适配十余种分类的展示 plt.figure(figsize=(14, 7)) # 绘制柱状图 plt.bar(res_df["分类标记"], res_df["总承付金额"], color="#2e86ab") # 旋转x轴标签避免文字重叠 plt.xticks(rotation=45, ha="right") plt.xlabel("小型企业分类标记", fontsize=12) plt.ylabel("总承付金额", fontsize=12) plt.title("各分类标记对应总承付金额", fontsize=14) # 自动调整布局,避免标签被截断 plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者DicksData
相关产品推荐
相关产品推荐

