企业银行未对账项数据可视化问题及优化方案求助
解决方案:按金额总和&账龄筛选的未对账项热力图实现
一、数据预处理:处理日期与账龄筛选
首先需确保日期字段为可计算的格式,再筛选出账龄超3个月的记录:
# 读取CSV并转换日期字段(根据你的实际日期格式调整format参数,比如%m/%d/%Y) df = pd.read_csv('你的数据集路径.csv') df['DATE'] = pd.to_datetime(df['DATE'], format='%Y-%m-%d') # 设定基准日期(与原图表一致的2024-06-01) cutoff_date = pd.to_datetime('2024-06-01') # 筛选账龄超过90天的未对账项 df_over_90 = df[(cutoff_date - df['DATE']).dt.days > 90]
二、按部门和来源汇总金额总和
替换原代码中统计数量的逻辑,改为按DIV和SOURCE分组计算金额总和:
# 分组聚合:计算每个部门-来源组合的金额总和 df_amount_sum = df_over_90.groupby(['DIV', 'SOURCE'])['AMOUNT'].sum().unstack() # 填充缺失值(若某部门无对应来源的记录,用0填充避免热力图显示异常) df_amount_sum = df_amount_sum.fillna(0)
三、绘制金额总和热力图
适配汇总后的金额数据,优化标注格式以便清晰展示大额数值:
from matplotlib import pyplot as plt import seaborn as sns plt.subplots(figsize=(8, 3.5)) plt.suptitle('Total Amount of Unreconciled Items (Over 90 Days) as of 06/01/2024', fontweight='bold') # 绘制热力图,标注使用千分位格式提升可读性 sns.heatmap(df_amount_sum, cmap='viridis', annot=True, fmt=',.0f', # 千分位显示,保留0位小数 linewidth=.5, square=True) plt.xlabel('Division') plt.ylabel('Source Type') plt.show()
四、Colab推荐图表异常排查
- 日期格式错误:若
DATE为字符串类型,无法计算账龄,必须用pd.to_datetime转换 - 金额格式问题:若
AMOUNT包含符号(如$、,),需先清洗:df['AMOUNT'] = df['AMOUNT'].replace('[\$,]', '', regex=True).astype(float) - 缺失值未处理:分组后出现的NaN会导致热力图显示异常,用
fillna(0)填充即可
五、Excel用户友好优化
若习惯Excel透视表逻辑,可改用pivot_table实现相同聚合:
df_amount_sum = pd.pivot_table(df_over_90, values='AMOUNT', index='SOURCE', columns='DIV', aggfunc='sum', fill_value=0)
也可更换颜色映射让大额更醒目:将cmap='viridis'改为cmap='YlOrRd'(黄橙红渐变)
内容的提问来源于stack exchange,提问作者K13
相关产品推荐
相关产品推荐

