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

如何根据另一列值统计DataFrame数据?含参训统计需求

Pandas 统计方案(无需预先过滤未参训行)

需求1:统计全员参训次数及Smith单独参训场次

1. 全员参训次数统计

通过分组后对参训状态做条件计数,无需提前过滤未参训行:

import pandas as pd
import numpy as np

# 假设原DataFrame名为df,列名分别为「员工姓名」、「参与状态」
participation_stats = df.groupby('员工姓名')['参与状态'].agg(
    参训次数=lambda group: np.sum(group == 'participated')
).reset_index()

该代码会生成新的DataFrame,包含每位员工的姓名和对应的参训次数。

2. Smith的参训场次单独统计

可以直接从上述统计结果提取,或直接从原DataFrame计算:

# 方式1:从统计结果提取
smith_count = participation_stats.loc[participation_stats['员工姓名'] == 'Smith', '参训次数'].iloc[0]

# 方式2:直接从原DataFrame计算(无需过滤行)
smith_count = np.sum((df['员工姓名'] == 'Smith') & (df['参与状态'] == 'participated'))

需求2:统计参训课程总时长

先确保已新增「Duration」列(填充课程分钟数),然后通过分组条件求和,未参训行的时长会被置为0,无需预先过滤:

# 方式1:使用np.where处理未参训行
duration_stats = df.groupby('员工姓名').agg(
    参训总时长=lambda group: np.sum(np.where(group['参与状态'] == 'participated', group['Duration'], 0))
).reset_index()

# 方式2:分组内条件筛选求和
duration_stats = df.groupby('员工姓名').apply(
    lambda group: group[group['参与状态'] == 'participated']['Duration'].sum()
).reset_index(name='参训总时长')

两种方式都不会预先过滤未参训的行,最终结果仅统计参训课程的总时长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 00:44:52