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

在Pandas中生成按城市、月份统计的Visa销售额占比透视表

Pandas实现城市×月份的Visa销售额占比透视表

需要生成一个透视表,展示以城市为行、月份为列的Visa销售额占比,期望输出如下:

Jan        Feb                     
London  50.055991  56.435644
Paris   15.119760  67.170191

此前用DAX可快速处理此类需求,但刚接触Pandas时尝试多种透视表和group-by函数都未达到预期,习惯了Excel中创建“度量值”后加入透视表的方式。

可复现输入数据:

import pandas as pd

data = {'Month': {0: 'Jan',
  1: 'Jan',
  2: 'Jan',
  3: 'Jan',
  4: 'Feb',
  5: 'Feb',
  6: 'Feb',
  7: 'Feb',
  8: 'Feb'},
 'City': {0: 'Paris',
  1: 'Paris',
  2: 'London',
  3: 'London',
  4: 'Paris',
  5: 'Paris',
  6: 'London',
  7: 'London',
  8: 'Paris'},
 'Card': {0: 'Visa',
  1: 'MasterCard',
  2: 'Visa',
  3: 'MasterCard',
  4: 'Visa',
  5: 'MasterCard',
  6: 'Visa',
  7: 'MasterCard',
  8: 'Visa'},
 ' Amount ': {0: ' $101 ',
  1: ' $567 ',
  2: ' $447 ',
  3: ' $446 ',
  4: ' $926 ',
  5: ' $652 ',
  6: ' $114 ',
  7: ' $88 ',
  8: ' $408 '}}

df = pd.DataFrame.from_dict(data)

步骤1:数据清洗转换

首先处理金额列,去除美元符号和空格,转为数值类型:

# 清理金额列并转换为数值
df['Amount'] = df[' Amount '].str.replace('$', '').str.strip().astype(float)
# 删除原冗余的金额列
df = df.drop(' Amount ', axis=1)

步骤2:计算分组汇总值

分别统计每个城市-月份维度下的Visa销售额、全卡种总销售额,再计算占比:

# 按城市+月份分组,计算Visa总销售额
visa_sales = df[df['Card'] == 'Visa'].groupby(['City', 'Month'])['Amount'].sum().rename('VisaAmount')

# 按城市+月份分组,计算全卡种总销售额
total_sales = df.groupby(['City', 'Month'])['Amount'].sum().rename('TotalAmount')

# 合并数据并计算Visa销售额占比(转为百分比格式)
ratio_df = pd.concat([visa_sales, total_sales], axis=1)
ratio_df['VisaRatio'] = (ratio_df['VisaAmount'] / ratio_df['TotalAmount']) * 100

步骤3:透视成目标格式

将结果透视为“城市为行、月份为列”的结构:

result = ratio_df['VisaRatio'].unstack(fill_value=0)
print(result)

运行后输出与预期一致:

Jan        Feb
London  50.055991  56.435644
Paris   15.119760  67.170191

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:22:21