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

如何用Python Pandas Groupby多列分组并统计状态次数

Pandas分组统计Late/On Time次数解决方案

你可以通过分组聚合一次性搞定总次数、Late次数和On Time次数,不用分开计算。这里给你三种简洁的实现方式:

方法一:分组+聚合条件计数(最直接)

直接在groupby的agg方法里同时统计总次数、符合条件的Late和On Time次数:

import pandas as pd
import numpy as np

# 基于你的原始df1计算
df_result = df1.groupby(['Type', 'Product']).agg(
    **{
        'Product/Type Count': ('Late or On Time', 'size'),
        'Late Count': ('Late or On Time', lambda x: np.sum(x == 'Late')),
        'On Time Count': ('Late or On Time', lambda x: np.sum(x == 'On Time'))
    }
).reset_index()

方法二:交叉表+合并统计

先用pd.crosstab生成组合对应的Late/On Time频次,再计算总次数并调整格式:

# 生成Type/Product与Late/On Time的交叉频次表
counts = pd.crosstab([df1['Type'], df1['Product']], df1['Late or On Time']).reset_index()
# 计算总次数
counts['Product/Type Count'] = counts['Late'] + counts['On Time']
# 调整列名和顺序匹配需求
counts = counts[['Type', 'Product', 'Product/Type Count', 'Late', 'On Time']].rename(
    columns={'Late': 'Late Count', 'On Time': 'On Time Count'}
)

方法三:哑变量转换+分组求和

把状态列转成哑变量后分组求和,再补充总次数:

# 把"Late or On Time"转成哑变量列
dummies = pd.get_dummies(df1['Late or On Time'])
# 合并Type、Product和哑变量列
combined = pd.concat([df1[['Type', 'Product']], dummies], axis=1)
# 分组求和
df_result = combined.groupby(['Type', 'Product']).sum().reset_index()
# 计算总次数
df_result['Product/Type Count'] = df_result['Late'] + df_result['On Time']
# 调整列名和顺序
df_result = df_result.rename(columns={'Late': 'Late Count', 'On Time': 'On Time Count'})
df_result = df_result[['Type', 'Product', 'Product/Type Count', 'Late Count', 'On Time Count']]

三种方法都能得到你想要的输出,其中方法一最省心,一次分组就完成所有统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:57:08