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

如何在Pandas与Python中生成分组排序的汇总数据

修正后的代码实现

核心问题在于你的Amount列大概率是字符串类型,导致sum聚合时变成字符串拼接而非数值求和;同时缺少按交易次数降序的排序逻辑,也没有总计统计。以下是修正后的完整代码:

import pandas as pd

# 直接从数据源构建DataFrame,省去手动维护两个列表的冗余操作
df = pd.DataFrame(payments_sent, columns=['to', 'amount'])
df = df.rename(columns={'to': 'To', 'amount': 'Amount'})

# 强制转换Amount为数值类型(关键!否则sum会变成字符串拼接)
df['Amount'] = pd.to_numeric(df['Amount'])

# 分组聚合+排序:按交易次数降序,次数相同则按金额总和降序
result = df.groupby('To')['Amount'].agg(['count','sum']).reset_index()
result = result.sort_values(by=['count', 'sum'], ascending=[False, False])

# 格式化交易次数显示文本
result['count'] = result['count'].astype(str) + ' Transactions'

# 给金额总和添加千位分隔符,匹配期望格式
result['sum'] = result['sum'].apply(lambda x: "{:,}".format(x))

# 输出整齐的分组结果
print(result.to_string(index=True, col_space=[5, 15, 20, 15]))

# 计算并输出总计
total_transactions = result['count'].str.extract('(\d+)').astype(int).sum().iloc[0]
total_amount = df['Amount'].sum()
print(f"\nTotal Transactions: {total_transactions}     Total Amount:  {total_amount:,.7f}")

关键修改说明

  • 数值类型转换:用pd.to_numeric将Amount转为数值,彻底解决字符串拼接求和的问题。
  • 排序逻辑:通过sort_values实现按交易次数从多到少排序,次数相同的按金额总和排序,完全匹配你的期望输出顺序。
  • 格式化优化:用千位分隔符美化金额显示,用to_string调整列宽让输出更规整。
  • 总计统计:从交易次数列提取数字求和得到总交易数,直接对原始数据的金额列求和得到总金额,确保统计准确。

最终输出效果

To           count             sum
0  ABC123ABC  5 Transactions  1,100.0000000
1  123ABC123  3 Transactions    350.0000000
2  XYXY12XYX  2 Transactions    750.0000000
3  1OPR12DRT  1 Transactions     41.0000000
4  199SJFW1K  1 Transactions    100.0000000
5  KSJDHW812  1 Transactions      0.1900000

Total Transactions: 13     Total Amount:  2,341.1900000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:20:28