无法按月份对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
相关产品推荐
相关产品推荐

