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

如何转置对象数组数据,以年份为维度聚合收入值?

数据转置实现方案

嘿,我来帮你搞定这个数据转置的需求!咱们可以用两种常见的方式来实现——纯Python字典处理,或者用pandas生成表格形式的转置结果,看你更需要哪种。

方式一:纯Python字典分组(生成键值对结构)

这种方式会把数据转置成年份为顶级键,月份为子键,收入为对应值的结构,非常方便后续的键值查找。

步骤与代码示例

# 先把你的原始数据补全(假设2016年的后续数据是类似结构)
raw_data = [
    {"year": 2017, "month": "Jan", "revenue": 2000},
    {"year": 2017, "month": "Feb", "revenue": 3000},
    {"year": 2017, "month": "Mar", "revenue": 1000},
    {"year": 2016, "month": "Jan", "revenue": 5000},
    {"year": 2016, "month": "Feb", "revenue": 4500},
    {"year": 2016, "month": "Mar", "revenue": 3200}
]

# 初始化空字典存储转置结果
transposed_data = {}

# 遍历原始数据完成分组转置
for item in raw_data:
    year = item["year"]
    month = item["month"]
    revenue = item["revenue"]
    
    # 如果当前年份还没在结果字典里,先创建一个空的子字典
    if year not in transposed_data:
        transposed_data[year] = {}
    # 将月份和收入对应存入子字典
    transposed_data[year][month] = revenue

# 打印转置后的结果
print(transposed_data)

运行结果

执行后会得到这样的结构:

{
    2017: {'Jan': 2000, 'Feb': 3000, 'Mar': 1000},
    2016: {'Jan': 5000, 'Feb': 4500, 'Mar': 3200}
}

方式二:用Pandas生成表格格式(适合数据分析场景)

如果你需要更直观的表格形式(月份为行,年份为列,收入为单元格值),用pandas库会更高效。

步骤与代码示例

import pandas as pd

# 同样用补全后的原始数据
raw_data = [
    {"year": 2017, "month": "Jan", "revenue": 2000},
    {"year": 2017, "month": "Feb", "revenue": 3000},
    {"year": 2017, "month": "Mar", "revenue": 1000},
    {"year": 2016, "month": "Jan", "revenue": 5000},
    {"year": 2016, "month": "Feb", "revenue": 4500},
    {"year": 2016, "month": "Mar", "revenue": 3200}
]

# 把原始数据转换成DataFrame
df = pd.DataFrame(raw_data)
# 使用pivot方法完成转置:行是月份,列是年份,值为收入
transposed_df = df.pivot(index='month', columns='year', values='revenue')

# 打印转置后的表格
print(transposed_df)

运行结果

输出的表格形式如下:

year   2016  2017
month            
Feb    4500  3000
Jan    5000  2000
Mar    3200  1000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:13:34