Pandas按城市和月份分组计算部门记录均值的方法咨询
问题:按城市和月份分组计算部门记录均值
我有一个包含多列不同部门记录的DataFrame,需要按"city"(城市)和"month"(月份)分组,计算各部门记录的均值。我已经实现了按"city"单独分组的逻辑,但不知道怎么同时按两列分组。我是Python和Pandas新手,求实现建议。
现有代码
new = df.DataFrame(columns = ['city', 'month']) cit = old['city'].unique() for i in range(len(cit)): c = cit[i] subset = old[old['city'] == c] a = subset['dept records A'].mean() b = subset['dept records B'].mean() tbl = tbl.append({'city':c,'dept records A':a,'dept records B':b})
我的思路
cit = old['city'].unique() mon = old['month'].unique() for i in range(len(cit)): for j in range(len(mon)): c = cit[i] m = mon[j] subset = old[old['city'] == c, old['month'] == m]
解决方案
先纠正你思路里的语法错误
你写的多条件筛选语法不对,Pandas中多条件筛选需要用&连接,且每个条件需加括号,正确写法是:
subset = old[(old['city'] == c) & (old['month'] == m)]
但这种嵌套循环的方式效率极低,数据量大时会明显卡顿,Pandas提供了更高效的分组方法。
推荐的Pandas原生实现
直接用groupby函数同时按两列分组,一行代码就能完成需求,完全不需要手动循环:
# 针对需要计算均值的部门列,直接分组求均值 result = old.groupby(['city', 'month'])[['dept records A', 'dept records B']].mean().reset_index()
代码解释:
groupby(['city', 'month']):指定按city和month两列作为分组依据[['dept records A', 'dept records B']]:选择需要计算均值的部门记录列.mean():对每个分组内的指定列计算均值.reset_index():将分组用的city和month从索引转回普通列,方便后续使用
这种方法是Pandas的向量化操作,比手动循环快得多,代码也更简洁易读,完全适配你的需求。
内容的提问来源于stack exchange,提问作者CodingCoder
相关产品推荐
相关产品推荐

