如何编写Python函数统计所有状态为Yes的唯一企业数量?
统计所有状态全为"Yes"的企业数量
数据示例
| company_name | new_company_status |
|---|---|
| A Co.,Ltd | Yes |
| B. Inc | No |
| PT XYZ | No |
| PT DFE, Tbk. | Yes |
| A Co.,Ltd | Yes |
| PT DFE, Tbk. | Yes |
需求说明
编写Python函数,从company_name列提取所有唯一企业名称,检查每个企业对应的new_company_status是否全部为"Yes",统计符合条件的企业总数,最终返回该整数。
现有代码问题
你提供的代码存在几处错误:
- 函数参数为
DataFrame,但内部使用未定义的df,会引发变量未找到错误 values.tolist缺少括号,应写为values.tolist(),否则获取的是方法对象而非列表- 遍历唯一企业时,未筛选当前企业的行,直接判断整列等于"Yes",逻辑错误
- 集合
uniq_comp不能用+=1做计数操作,类型不匹配
修正后的代码
简洁高效版(利用pandas分组聚合)
import pandas as pd def count_all_yes_companies(df): # 按企业分组,检查每组状态是否全为Yes,统计符合条件的数量 all_yes_companies = df.groupby('company_name')['new_company_status'].apply(lambda x: (x == 'Yes').all()) return all_yes_companies.sum()
分步实现版(适合理解逻辑)
def count_all_yes_companies(df): # 获取所有唯一企业名称 unique_companies = df['company_name'].unique().tolist() valid_count = 0 for company in unique_companies: # 筛选当前企业的所有状态记录 company_statuses = df[df['company_name'] == company]['new_company_status'] # 检查该企业的所有状态是否都是"Yes" if (company_statuses == 'Yes').all(): valid_count += 1 return valid_count
测试代码
# 构建测试数据 data = { 'company_name': ['A Co.,Ltd', 'B. Inc', 'PT XYZ', 'PT DFE, Tbk.', 'A Co.,Ltd', 'PT DFE, Tbk.'], 'new_company_status': ['Yes', 'No', 'No', 'Yes', 'Yes', 'Yes'] } df = pd.DataFrame(data) # 调用函数并输出结果 result = count_all_yes_companies(df) print(result) # 输出:2
内容的提问来源于stack exchange,提问作者matilda
相关产品推荐
相关产品推荐

