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

如何按地点分组计算苹果占比并转置Pandas DataFrame?

高效计算各地点苹果占比并重塑Pandas DataFrame格式

原始数据

import pandas as pd

data = [['Location 1', 'Oranges', 9, 12, 5, 10, 7, 12], 
        ['Location 1', 'Apples', 2, 6, 4, 3, 7, 2], 
        ['Location 1', 'Total', 11, 18, 9, 13, 14, 14],
        ['Location 2', 'Oranges', 11, 8, 14, 8, 10, 9], 
        ['Location 2', 'Apples', 5, 4, 6, 2, 9, 9], 
        ['Location 2', 'Total', 16, 12, 20, 10, 19, 18]]

df = pd.DataFrame(data, columns=['Location', 'Fruit', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'])

原始DataFrame结构:

Location    Fruit   Jan  Feb  Mar  Apr  May  Jun
0  Location 1  Oranges    9   12    5   10    7   12
1  Location 1   Apples    2    6    4    3    7    2
2  Location 1    Total   11   18    9   13   14   14
3  Location 2  Oranges   11    8   14    8   10    9
4  Location 2   Apples    5    4    6    2    9    9
5  Location 2    Total   16   12   20   10   19   18

需求目标

按Location分组,计算每个地点每月苹果数量占总量的比例(Apples/Total),并将DataFrame重塑为以下格式:

Jan                       Feb                       Mar
Location    # of Apples    % Fruit    # of Apples    % Fruit    # of Apples    % Fruit
Location 1       2          18.2%          6          33.3%          4          44.4%
Location 2       5          31.3%          4          33.3%          6          20.0%

高效解决方案

通过Pandas的分组、透视和重塑操作实现,无需手动定位行索引,适配任意数量的地点:

完整代码

# 1. 筛选苹果和总量数据,转为透视表
filtered = df[df['Fruit'].isin(['Apples', 'Total'])].pivot(index='Location', columns='Fruit')

# 2. 定义所有月份,循环计算占比并转为百分比格式
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
for month in months:
    filtered[('% Fruit', month)] = (filtered[(month, 'Apples')] / filtered[(month, 'Total')]).apply(lambda x: f"{x*100:.1f}%")

# 3. 构建目标列顺序,将每个月份的苹果数和占比配对
cols = []
for month in months:
    cols.append((month, 'Apples'))
    cols.append(('% Fruit', month))

# 4. 调整列结构和命名,匹配需求格式
result = filtered[cols].rename(columns={'Apples': '# of Apples'}, level=1)
result.columns = pd.MultiIndex.from_tuples(
    [(month, col_name) for (col_type, month), col_name in result.columns],
    names=[None, None]
)

# 5. 重置索引让Location成为显式列
result = result.reset_index()

代码说明

  • 筛选+透视:直接提取苹果和总量数据,按地点和水果类型生成透视表,自动对齐每个地点的对应数据
  • 循环计算占比:批量处理所有月份,避免重复代码,适配任意月份数量
  • 列结构重组:通过自定义列顺序,将每个月份的苹果数和占比放在同一分组下,完美匹配需求格式

运行后输出的result就是目标格式的DataFrame,且无需手动处理行索引,自动适配所有地点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:25:22