如何用Python生成账户交易汇总列表并优化输出格式
问题描述
现有一段Python代码可正常运行,但需要对输出做汇总排序以提升可读性,核心需求是按账户汇总交易次数、计算交易总额,将当前的明细输出转换为指定的汇总格式。
原代码:
account = [] amount = [] pmtReceived = [] for payment in payments_received: print (" ({:>15}) <- {}".format(payment['amount'] ,payment['from'])) pmtReceived.append(payment['amount']) account.append(payment['to']) amount.append(payment['amount']) df = pd.DataFrame(list(zip(lst1, lst2)), columns =['To', 'Amount']) print (df)
当前输出:
Account Amount 0 BD001ABC... 180.0000000 1 ACC011XY... 120.0000000 2 ACC011XY... 444.0000000 3 012ABC1A... 190.0000000 4 012ABC1A... 50.0000000 5 012ABC1A... 110.0000000 6 012ABC1A... 400.0000000 7 XY123AYT... 0.4900000
期望输出:
BD001ABC (1 Transaction / 180.0) ACC011XY (2 Transaction / 564.0) 012ABC1A (4 Transaction / 750.0) XY123AYT (1 Transaction / 0.49)
解决方案
直接利用Pandas的groupby功能就能快速实现汇总需求,修改后的代码如下:
import pandas as pd # 修正原代码的变量错误,将收集到的账户和金额数据存入DataFrame df = pd.DataFrame({ 'Account': account, 'Amount': amount }) # 按账户分组,统计交易次数与总额 summary_df = df.groupby('Account').agg( 交易次数=('Amount', 'count'), 交易总额=('Amount', 'sum') ).reset_index() # 格式化输出为期望样式 for _, row in summary_df.iterrows(): # 处理账户名中的省略号,提取完整前缀 account_prefix = row['Account'].split('...')[0] # 按需求格式打印 print(f"{account_prefix} ({row['交易次数']} Transaction / {row['交易总额']})")
关键说明:
- 原代码中
lst1、lst2应为account和amount,已修正该变量错误; - 使用
groupby('Account')按账户分组,通过agg方法一次性完成交易次数(count)和总额(sum)的统计; - 遍历汇总结果时,处理了账户名的省略号格式,确保输出和示例一致;若原数据无省略号,直接使用
row['Account']即可。
内容的提问来源于stack exchange,提问作者errzoned
相关产品推荐
相关产品推荐

