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

如何用Pandas groupby统计每日岗位人数并回写至原DataFrame?

解决Pandas按日+岗位统计并回写原DataFrame的问题

你需要统计每日各岗位的员工数量并回写到原DataFrame,核心问题在于之前的分组维度不全——只按DAY分组无法区分同日内的不同岗位。以下是两种高效实现方式:

方法一:多维度分组+transform(推荐)

直接同时按DAY和JOB_TITLE两个字段分组,再用transform('count')将统计结果广播到原DataFrame的每一行:

import pandas as pd

shifts = [("Cashier", "Thursday"), ("Cashier", "Thursday"),
        ("Cashier", "Thursday"), ("Cook", "Thursday"),
        ("Cashier", "Friday"), ("Cashier", "Friday"),
        ("Cook", "Friday"), ("Cook", "Friday"),
        ("Cashier", "Saturday"), ("Cook", "Saturday"),
        ("Cook", "Saturday")]
labels = ["JOB_TITLE", "DAY"]
df = pd.DataFrame.from_records(shifts, columns=labels)

# 关键:同时按DAY和JOB_TITLE分组,统计每组的数量并回写
df['TYPE'] = df.groupby(['DAY', 'JOB_TITLE'])['JOB_TITLE'].transform('count')
print(df)

执行后会得到你期望的结果:

JOB_TITLE       DAY  TYPE
0    Cashier   Thursday     3
1    Cashier   Thursday     3
2    Cashier   Thursday     3
3       Cook   Thursday     1
4    Cashier     Friday     2
5    Cashier     Friday     2
6       Cook     Friday     2
7       Cook     Friday     2
8    Cashier   Saturday     1
9       Cook   Saturday     2
10      Cook   Saturday     2

方法二:value_counts+merge

如果习惯用value_counts,可以先统计出结果再合并到原DataFrame:

# 先统计各(DAY, JOB_TITLE)组合的数量
counts = df.groupby('DAY')['JOB_TITLE'].value_counts().reset_index(name='TYPE')
# 合并到原DataFrame
df = df.merge(counts, on=['DAY', 'JOB_TITLE'])

为什么之前的transform无效?

你之前的代码df.groupby('DAY')['JOB_TITLE'].transform('count')只按DAY分组,统计的是当日所有岗位的总记录数,而非每个岗位单独的数量,所以得到的结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:30:46