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

按列分组对比相似行值:按描述分组两年及金额遇技术难题

解决按描述分组对比两年金额的问题

Hey there! Let's tackle this grouping and pivoting problem you're facing—sounds like you want to turn row-level year/amount data into a side-by-side comparison for each description, right? I've got you covered with two common tool solutions below.


假设你的原始数据结构

先举个典型的原始数据例子,方便我们对应解决方案:

import pandas as pd

raw_data = pd.DataFrame({
    'description': ['Office Supplies', 'Office Supplies', 'Travel', 'Travel', 'Equipment'],
    'year': [2022, 2023, 2022, 2023, 2022],
    'amount': [1500, 1800, 2200, 2500, 3000]
})

用Python Pandas实现转换

这是处理这类表格转换最常用的方式,用pivot或pivot_table就能轻松搞定:

场景1:每个描述+年份组合唯一

如果你的数据里,同一个description对应同一年份只有一条记录,直接用pivot:

# 按description分组,将年份转为列,金额作为对应值
pivoted_df = raw_data.pivot(index='description', columns='year', values='amount').reset_index()

# 给列名设置更清晰的命名
pivoted_df.columns = ['description', '2022_amount', '2023_amount']

# 处理缺失值(比如某个描述只有单年份数据)
pivoted_df = pivoted_df.fillna(0)

print(pivoted_df)

场景2:存在重复的描述+年份组合

如果同一个描述同一年有多条金额记录,用pivot_table加聚合函数(比如求和、均值):

pivoted_df = raw_data.pivot_table(
    index='description',
    columns='year',
    values='amount',
    aggfunc='sum'  # 可替换为'mean'/'max'等聚合方式
).reset_index()

pivoted_df.columns = ['description', '2022_amount', '2023_amount']
pivoted_df = pivoted_df.fillna(0)

用SQL实现转换

如果你是在数据库里处理数据,用CASE WHEN配合GROUP BY就能生成对比列:

SELECT
    description,
    SUM(CASE WHEN year = 2022 THEN amount ELSE 0 END) AS 2022_amount,
    SUM(CASE WHEN year = 2023 THEN amount ELSE 0 END) AS 2023_amount
FROM your_table_name
GROUP BY description;

这个写法会自动把没有对应年份的描述金额填充为0,也可以根据需求调整(比如换成NULL)。


如果还有特殊情况(比如要对比更多年份、处理复杂的分组规则),随时说,我们再调整方案!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:10:26