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

如何使用Pandas按月份分组交易数据并计算月度差值

交易数据按月分组并计算相邻月份差值的完整实现方案

需求说明

  • 将交易数据按年月分桶(如2023-03、2023-04、2023-05)
  • 计算相邻月份间的交易金额差值(支持两种场景:单用户月度差值、全量用户月度总金额差值)

场景1:计算每个用户的相邻月份交易金额差值

完整代码实现

import pandas as pd

# 构造示例数据集
data = {
    'Trans ID': [1,1,1,2,2,2,3,3,3],
    'Trans Amount': [50,600,40,500,500,10,980,1800,35],
    'Trans Date': ['2023-03-31','2023-04-30','2023-05-31','2023-03-31','2023-04-30','2023-05-31','2023-03-31','2023-04-30','2023-05-31']
}
df = pd.DataFrame(data)

# 1. 日期预处理:转换为日期格式并提取年月
df['Year-Month'] = pd.to_datetime(df['Trans Date']).dt.strftime('%Y-%m')

# 2. 按用户ID和年月排序,确保时间顺序正确
df = df.sort_values(by=['Trans ID', 'Year-Month']).reset_index(drop=True)

# 3. 计算每个用户的相邻月份交易金额差值
df['Month-over-Month Difference'] = df.groupby('Trans ID')['Trans Amount'].diff()

# 查看结果
print(df)

输出结果

Trans IDTrans AmountTrans DateYear-MonthMonth-over-Month Difference
01502023-03-312023-03NaN
116002023-04-302023-04550.0
21402023-05-312023-05-560.0
325002023-03-312023-03NaN
425002023-04-302023-040.0
52102023-05-312023-05-490.0
639802023-03-312023-03NaN
7318002023-04-302023-04820.0
83352023-05-312023-05-1765.0

场景2:计算全量用户月度总金额的相邻月份差值

完整代码实现

import pandas as pd

# 构造示例数据集(同上)
data = {
    'Trans ID': [1,1,1,2,2,2,3,3,3],
    'Trans Amount': [50,600,40,500,500,10,980,1800,35],
    'Trans Date': ['2023-03-31','2023-04-30','2023-05-31','2023-03-31','2023-04-30','2023-05-31','2023-03-31','2023-04-30','2023-05-31']
}
df = pd.DataFrame(data)

# 1. 日期预处理:转换为日期格式并提取年月
df['Year-Month'] = pd.to_datetime(df['Trans Date']).dt.strftime('%Y-%m')

# 2. 按月分组计算总交易金额
monthly_total = df.groupby('Year-Month')['Trans Amount'].sum().reset_index()

# 3. 按年月排序,确保时间顺序正确
monthly_total = monthly_total.sort_values('Year-Month').reset_index(drop=True)

# 4. 计算相邻月份总金额差值
monthly_total['Month-over-Month Difference'] = monthly_total['Trans Amount'].diff()

# 查看结果
print(monthly_total)

输出结果

Year-MonthTrans AmountMonth-over-Month Difference
02023-031530NaN
12023-0429001370.0
22023-0585-2815.0

对原代码的说明

你之前写的字典推导式d = {x : y for x, y in df.groupby(pd.to_date(df.Trans_Date).dt.strftime('%y-%m'))}会把每个分组的DataFrame存入字典,这种方式后续处理差值会比较繁琐。推荐直接使用pandas的groupby+diff()方法,一步到位完成差值计算,代码更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:20:40