如何用Pandas按用户、日期和交易类型分组统计数量与总成本?
Pandas实现多维度交易数据聚合统计
问题场景
现有如下原始DataFrame:
Date User Tradetype Cost 2022-01-01 User1 Sell $1 2022-01-01 User1 Buy $2 2022-01-01 User1 Sell $0 2022-01-01 User2 Buy $1 2022-01-01 User2 Sell $1
需要聚合得到按用户、日期、交易类型分组的交易次数及总金额:
User Date Tradetype Count TotalCost User1 2022-01-01 Buy 2 $2 User1 2022-01-01 Sell 2 $2 User2 2022-01-01 Buy 1 $1 User2 2022-01-01 Sell 1 $1
解决方案
核心是按User、Date、Tradetype三个维度分组,同时完成交易次数计数和金额求和,步骤如下:
- 清洗金额列:先去掉
$符号,转为数值类型才能进行求和运算 - 多维度分组聚合:用
groupby指定三个分组字段,同时统计行数和金额总和 - 格式化金额输出:给求和后的总金额重新加上
$符号 - 调整结果结构:重置索引并匹配目标输出的列顺序
完整代码
import pandas as pd # 构造原始DataFrame data = { 'Date': ['2022-01-01', '2022-01-01', '2022-01-01', '2022-01-01', '2022-01-01'], 'User': ['User1', 'User1', 'User1', 'User2', 'User2'], 'Tradetype': ['Sell', 'Buy', 'Sell', 'Buy', 'Sell'], 'Cost': ['$1', '$2', '$0', '$1', '$1'] } df = pd.DataFrame(data) # 1. 清洗Cost列,转为数值类型 df['Cost'] = df['Cost'].str.replace('$', '', regex=False).astype(float) # 2. 多列分组,同时统计交易次数和总金额 agg_result = df.groupby(['User', 'Date', 'Tradetype']).agg( Count=('Cost', 'size'), # size统计每组行数,即交易次数 TotalCost=('Cost', 'sum') # sum计算每组金额总和 ).reset_index() # 3. 给TotalCost加回$符号,匹配目标格式 agg_result['TotalCost'] = '$' + agg_result['TotalCost'].astype(str) # 4. 调整列顺序(可选,完全匹配目标输出结构) agg_result = agg_result[['User', 'Date', 'Tradetype', 'Count', 'TotalCost']] print(agg_result)
关键说明
groupby(['User', 'Date', 'Tradetype']):同时按三个字段分组,确保每个用户在指定日期下的每种交易类型单独统计,避免维度遗漏agg()方法支持一次性定义多个聚合规则,size用于统计交易次数,sum用于计算金额总和- 若不需要保留
$格式,可直接省略金额格式化步骤
内容的提问来源于stack exchange,提问作者FlyingPickle
相关产品推荐
相关产品推荐

