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

如何用统一函数按市场统计DataFrame中各可用性状态的数量?

解决方案

方法1:生成结构化统计表格(推荐)

不用逐个市场写重复代码,直接用pandas的crosstab就能一步生成所有市场的状态计数,高效还不容易出错:

import pandas as pd

def get_all_market_availability_counts(file_path="./_data/users/availabilities.csv"):
    # 提前定义好要统计的5种可用性状态
    target_states = ["available", "in_call", "offline", "do_not_disturb", "after_call_work"]
    
    # 读取数据,把availability转成分类类型——确保哪怕某市场没有某状态,统计结果里也会保留该列(值为0)
    df = pd.read_csv(file_path, encoding='ISO-8859-1')
    df['availability'] = pd.Categorical(df['availability'], categories=target_states)
    
    # 交叉统计:行是市场,列是状态,值为对应数量
    return pd.crosstab(df['market'], df['availability'], dropna=False)

调用这个函数后,会返回一个规整的DataFrame,直接就能看到每个市场下所有状态的计数,没有的状态自动填0。

方法2:返回字典格式结果(按需选用)

如果需要用字典格式获取每个市场的状态统计,基于上面的函数改一下就行:

def get_availability_counts_dict(file_path="./_data/users/availabilities.csv"):
    count_df = get_all_market_availability_counts(file_path)
    # 把DataFrame转成字典:key是市场名,value是该市场的状态计数字典
    return count_df.to_dict('index')

为什么比原代码好?

  • 不管有10个还是100个市场,一次调用就能完成所有统计,完全避免冗余代码;
  • 用pd.Categorical强制指定统计范围,不会漏掉任何需要统计的状态;
  • 代码简洁易维护,后续要加新状态,只需要修改target_states列表就行。

示例输出(用你给的测试数据)

调用get_all_market_availability_counts()会得到:

marketavailablein_callofflinedo_not_disturbafter_call_work
dach30000
fr12000
nl00200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:25:24