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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:27:27