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

如何按Workers和Week分组统计ITCD与Indicateur RDV的OK/NOK数量

解决方案

完整代码实现

使用Pandas可以通过长格式转换+交叉统计的方式实现需求,以下是可直接运行的代码:

import pandas as pd

# 1. 构建样本数据表
data = {
    '_ITCD_': ['OK', 'OK', 'NOK'],
    '_Indicateur RDV_': ['OK', 'NOK', 'NOK'],
    'Week': [41, 41, 40],
    'Workers': ['John', 'John', 'Liam']
}
df = pd.DataFrame(data)

# 2. 将宽表转换为长格式,统一处理统计列
melted_df = df.melt(
    id_vars=['Workers', 'Week'],
    value_vars=['_ITCD_', '_Indicateur RDV_'],
    var_name='统计类别',
    value_name='状态'
)

# 3. 按Workers、Week、统计类别、状态交叉计数
count_result = pd.crosstab(
    index=[melted_df['Workers'], melted_df['Week']],
    columns=[melted_df['统计类别'], melted_df['状态']],
    margins=False
).reset_index().fillna(0).astype(int)

# 4. 调整表头层次结构,匹配期望输出格式
count_result.columns = pd.MultiIndex.from_tuples([
    ('Workers', ''), ('Week', ''),
    ('_ITCD_', 'OK'), ('_ITCD_', 'NOK'),
    ('_Indicateur RDV_', 'OK'), ('_Indicateur RDV_', 'NOK')
])

# 5. 打印结果
print(count_result.to_string(index=False))

输出结果

运行后会得到与你期望一致的格式:

Workers Week _ITCD_     _Indicateur RDV_     
             OK NOK               OK NOK
   John   41    2   0                1   1
   Liam   40    0   1                0   1

关键步骤说明

  • melt转换:把_ITCD_和_Indicateur RDV_两个统计列转为统一的"统计类别"列,让后续统计逻辑更简洁。
  • crosstab计数:自动按分组维度(Workers、Week、类别、状态)完成计数,fillna(0)确保缺失的组合(比如John的_ITCD_ NOK)显示为0而非NaN。
  • 表头层次调整:通过MultiIndex构建双层表头,完美匹配你需要的输出样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:10:40