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

如何按月份与concept列对Pandas DataFrame进行分组聚合

按月份+Concept分组求和的解决方案

步骤1:确保日期列是datetime类型

你已经完成这一步,这里再明确完整初始化代码:

import pandas as pd

data={
 'date':['02/01/2023', '03/01/2023', '12/01/2023', '16/01/2023', '23/01/2023', '03/02/2023', '14/02/2023', '17/02/2023', '17/02/2023', '20/02/2023'],
'amount':[-2.6, -230.0, -9.32, -13.99, -12.99, -50.0, -5.84, -6.6, -11.95, -20.4],
'concept':['FOOD', 'REPAIR', 'HEALTH', 'NO CLASSIFIED', 'NO CLASSIFIED', 'REPAIR', 'FOOD', 'NO CLASSIFIED', 'FOOD', 'HEALTH']     
      }
df = pd.DataFrame(data)

# 转换日期格式,适配日/月/年的输入格式
df['date'] = pd.to_datetime(df['date'], dayfirst=True)

步骤2:按月份+Concept分组并求和

核心是提取日期的月份维度(而非完整日期)来分组,这里提供两种简洁实现方式:

方式一:利用周期类型分组

# 按月份周期(如2023-01)和concept分组,对amount求和
grouped_df = df.groupby([df['date'].dt.to_period('M'), 'concept'])['amount'].sum().reset_index()

# 将月份周期格式化为"Jan-23"样式
grouped_df['date'] = grouped_df['date'].dt.strftime('%b-%y')

# 同一月份仅显示一次,重复行留空
grouped_df['date'] = grouped_df['date'].mask(grouped_df['date'].duplicated(), '')

方式二:先提取月份字符串再分组

# 从日期中提取"Jan-23"格式的月份字符串
df['month'] = df['date'].dt.strftime('%b-%y')

# 按月份字符串和concept分组求和
grouped_df = df.groupby(['month', 'concept'])['amount'].sum().reset_index()

# 重命名列名为date
grouped_df.rename(columns={'month': 'date'}, inplace=True)

# 处理重复月份显示
grouped_df['date'] = grouped_df['date'].mask(grouped_df['date'].duplicated(), '')

最终结果

执行上述代码后,grouped_df的输出与你期望的格式完全一致:

dateconceptamount
Jan-23FOOD-2.60
HEALTH-9.32
NO CLASSIFIED-26.98
REPAIR-230.00
Feb-23FOOD-17.79
HEALTH-20.40
NO CLASSIFIED-6.60
REPAIR-50.00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:12:05