如何使用Pandas按月份和费用类别自动化汇总支出数据?
自动化汇总每月各费用类别总支出方案
核心思路
无需逐个指定费用列名,通过**排除前两列(Name、Month)**自动识别所有费用类别列,再按月份分组求和即可实现自动化汇总。
完整代码实现
import pandas as pd # 创建示例数据集 data = {'Name': ['Tom', 'Nick','Jack', 'Tom', 'Nick','Jack', 'Tom', 'Nick','Jack'], 'Month': ['01', '01', '01', '02', '02', '02', '03', '03', '03'], 'Super':[52, 25, 125, 40, 35, 90, 42, 29, 88], 'travel':[32, 18, 41, 23, None, 45, 28, 21, 76], 'bar': [24, 12, 38, 14, 9, None, 28, 9, 22]} df = pd.DataFrame(data) # 自动识别所有费用类别列(排除Name和Month) # 若需保留原DataFrame中费用列的顺序,使用df.columns.drop(['Name', 'Month']) expense_cols = df.columns.difference(['Name', 'Month']) # 按月份分组,对费用列求和(自动忽略NaN值) monthly_total = df.groupby('Month')[expense_cols].sum() # 输出结果 print(monthly_total)
代码说明
自动识别费用列:
df.columns.difference(['Name', 'Month']):返回除Name、Month外的所有列,无论费用类别有多少个(比如你实际的22个),都能自动适配,无需手动列名。- 若需要保持费用列与原DataFrame一致的顺序,替换为
df.columns.drop(['Name', 'Month'])即可。
分组求和:
groupby('Month'):按月份对数据分组。.sum():对每个分组内的费用列求和,自动忽略数据中的None(即pandas中的NaN值),不影响总和计算。
示例输出
Super bar travel Month 01 202 74 91 02 165 23 68 03 159 59 125
内容的提问来源于stack exchange,提问作者SAJ
相关产品推荐
相关产品推荐

