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

无法按月份对DataFrame分组求和,请求技术协助

问题描述

我编写了如下代码,但其中这一行:

cs.groupby(cs['Disbursal_Date'].dt.strftime('%B'))['Revenue'].sum() 

并未按月份对数据进行分组,执行后输出的仍是完整的DataFrame。恳请各位提供技术帮助。

完整代码如下:

import pandas as pd
import os
import glob
import numpy as np

os.chdir("C:/csv/")

extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

cs = pd.concat([pd.read_csv(f) for f in all_filenames])

cs.drop(cs.columns[[0]], axis=1, inplace=True)

cs = cs[cs["Booked"] == 1]

cs['Disbursal_Date'] = pd.to_datetime(cs['Disbursal_Date'])

cs.drop_duplicates(inplace=True)

cs['Revenue'] = np.where(cs['Loan_Amount'] < 1000, 28,
              np.where((cs['Loan_Amount'] > 1000) & (cs['APR'] < 0.3), 0.0525 * cs['Loan_Amount'],
              np.where((cs['Loan_Amount'] > 1000) & (cs['APR'] > 0.3), 0.0275 * cs['Loan_Amount'], 0)))


cs.loc[cs.Revenue >= 175, "Revenue"] = 175
cs.loc[cs.Revenue <= 52.50, "Revenue"] = 52.50

cs.groupby(cs['Disbursal_Date'].dt.strftime('%B'))['Revenue'].sum()

print(cs)
问题原因与解决方法

你的groupby聚合操作其实已经执行了,但没有将结果保存到变量中,最后print(cs)输出的还是原始的DataFrame,所以看起来分组没生效。

核心修改

把分组聚合的结果赋值给新变量,然后打印这个变量即可:

# 保存分组求和结果
monthly_revenue = cs.groupby(cs['Disbursal_Date'].dt.strftime('%B'))['Revenue'].sum()

# 输出分组后的结果
print(monthly_revenue)

额外优化:按自然月份顺序排序

默认分组结果会按月份名称的字母顺序排列(比如April会排在January前面),如果需要按1-12月的自然顺序展示,可以用分类类型指定月份顺序:

# 定义标准月份顺序
month_order = ['January', 'February', 'March', 'April', 'May', 'June', 
               'July', 'August', 'September', 'October', 'November', 'December']

# 将月份名称转为带顺序的分类类型
cs['Month'] = pd.Categorical(cs['Disbursal_Date'].dt.strftime('%B'), categories=month_order, ordered=True)

# 按分类后的月份分组,结果自动按自然顺序排列
monthly_revenue = cs.groupby('Month')['Revenue'].sum()
print(monthly_revenue)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:05:53