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

使用Pandas解析CSV文件时的计数错误问题求助

问题修正与高效实现方案

错误原因分析

你用嵌套循环遍历Responsible和Status两个列表的写法,本质是把每个部门和所有状态做了笛卡尔积匹配,没有按行对应关系统计,导致计数重复或错乱,这是C++手动遍历思维在Python/Pandas环境下的典型误区。


错误代码的修正方案(循环写法,仅用于理解逻辑)

如果暂时想保留循环思维,必须按行遍历,而非嵌套两个独立列表:

import pandas as pd

# 读取CSV并提取指定列
df = pd.read_csv('tasks.csv')[['Responsible', 'Status']]

# 初始化计数字典
dept_stats = {}

# 遍历每一行数据(按行匹配部门和状态)
for _, row in df.iterrows():
    dept = row['Responsible']
    status = row['Status']
    
    # 首次遇到部门时初始化计数
    if dept not in dept_stats:
        dept_stats[dept] = {'Comp': 0, 'Active': 0, 'Total': 0}
    
    # 累加总任务数
    dept_stats[dept]['Total'] += 1
    # 对应状态计数
    if status == 'Comp':
        dept_stats[dept]['Comp'] += 1
    elif status == 'Active':
        dept_stats[dept]['Active'] += 1

# 打印结果
for dept, stats in dept_stats.items():
    print(f"部门: {dept}")
    print(f"Comp任务数: {stats['Comp']}")
    print(f"Active任务数: {stats['Active']}")
    print(f"总任务数: {stats['Total']}\n")

Pandas原生高效实现(推荐)

Pandas是为向量式数据处理设计的,完全不需要手动循环,底层用C实现,效率比Python循环高几个数量级,代码也更简洁:

方法1:groupby + 自定义聚合(灵活适配多需求)

import pandas as pd

# 读取指定列
df = pd.read_csv('tasks.csv')[['Responsible', 'Status']]

# 按部门分组,一次性统计所有指标
result = df.groupby('Responsible').agg(
    总任务数=('Status', 'count'),
    Comp任务数=('Status', lambda x: (x == 'Comp').sum()),
    Active任务数=('Status', lambda x: (x == 'Active').sum())
).reset_index().rename(columns={'Responsible': '部门'})

# 输出结果
print(result)
# 保存到新CSV(可选)
# result.to_csv('部门任务统计.csv', index=False)

方法2:crosstab快速生成状态分布表

如果只需要统计指定状态的数量,用交叉表更直观:

import pandas as pd

df = pd.read_csv('tasks.csv')[['Responsible', 'Status']]

# 生成部门×状态的交叉计数表
cross_table = pd.crosstab(df['Responsible'], df['Status'])
# 添加总任务数列
cross_table['总任务数'] = cross_table.sum(axis=1)
# 筛选需要的列并格式化
result = cross_table[['Comp', 'Active', '总任务数']].reset_index().rename(columns={'Responsible': '部门'})

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:15:38