如何使用Pandas按用户统计各交易类型的交易次数并转换为宽表?
解决方案
你可以用两种简洁的方式实现这个统计需求:
方法一:groupby + unstack
先按User和Type分组统计交易次数,再将行索引中的Type转换为列,同时指定空值填充规则:
import pandas as pd # 构造你的示例数据 df = pd.DataFrame({ 'User': [100,100,100,200,200,200,300,300,300], 'Amount': [10,20,30,50,50,50,20,15,15], 'Type': ['Check','Cash','Paypal','Venmo','Cash','Check','Zelle','Zelle','Zelle'] }) # 分组统计次数,转宽表,未交易的填充0(换成''就是留空) result = df.groupby(['User', 'Type']).size().unstack(fill_value=0) # 把User从索引转为普通列 result = result.reset_index() print(result)
方法二:pd.crosstab(更直接)
crosstab是Pandas专门用于生成交叉频数表的工具,一步就能得到结果:
# 直接生成用户和交易类型的交叉次数表 result = pd.crosstab(df['User'], df['Type']) # 若要将0替换为空字符串,执行下面一行 # result = result.replace(0, '') print(result)
输出效果
两种方法都会生成你需要的格式:
- 每行对应一个用户
- 每列对应一种交易类型
- 单元格值为该用户使用对应交易方式的次数,未使用的会显示0(或空字符串,根据你的设置)
内容的提问来源于stack exchange,提问作者FlyingPickle
相关产品推荐
相关产品推荐

