基于Pandas实现类Excel COUNTIFS的动态≥条件计数
在Python中实现动态COUNTIFS等效功能(Pandas方案)
问题说明
需要实现类似Excel COUNTIFS的变体逻辑:针对参数数据集中的每一行,统计人口数据集中同时满足以下两个条件的条目数量:
- 与当前行
type字段值一致 actual_score≥ 当前行的required_score值
参数数据集(df_params)
type required_score A 4 A 5 A 6 A 7 B 1 B 3 B 8 B 9 C 2 C 5 C 6 C 7 C 8
人口数据集(df_pop)
type actual_score A 3 A 2 A 7 A 5 B 1 B 3 B 8 B 9 C 8 C 8 C 3 C 2
预期输出
为参数数据集新增available_population列,结果如下:
type required_score available_population A 4 2 A 5 2 A 6 1 A 7 1 B 1 4 B 3 3 B 8 2 B 9 1 C 2 4 C 5 2 C 6 2 C 7 2 C 8 2
Pandas解决方案
以下方案基于groupby、agg等函数实现,避免逐行循环的低效操作:
1. 加载数据集
首先将示例数据转为Pandas DataFrame:
import pandas as pd import numpy as np # 参数数据集 df_params = pd.DataFrame({ 'type': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C'], 'required_score': [4,5,6,7,1,3,8,9,2,5,6,7,8] }) # 人口数据集 df_pop = pd.DataFrame({ 'type': ['A','A','A','A','B','B','B','B','C','C','C','C'], 'actual_score': [3,2,7,5,1,3,8,9,8,8,3,2] })
2. 高效分组统计方案
通过预计算分组后的分数计数,再映射到参数数据集:
# 对人口数据集按type分组,预计算每个分数及以上的条目数 def build_count_mapper(group): # 对分组内的分数降序排序 sorted_scores = sorted(group.unique(), reverse=True) # 计算每个分数对应的符合条件的数量 score_counts = {score: (group >= score).sum() for score in sorted_scores} # 处理参数中存在、但人口数据里没有的分数 def count_matches(required_score): for score in sorted_scores: if score >= required_score: return score_counts[score] return 0 return count_matches # 生成每个type对应的计数映射函数 type_count_mappers = df_pop.groupby('type')['actual_score'].apply(build_count_mapper) # 为参数数据集添加结果列 df_params['available_population'] = df_params.apply( lambda row: type_count_mappers[row['type']](row['required_score']), axis=1 )
3. 简化版方案(适合小数据集)
如果数据量不大,也可以用合并+广播比较的方式快速实现:
# 按type分组,将每组的actual_score转为列表 grouped_actual = df_pop.groupby('type')['actual_score'].agg(list).reset_index() # 合并参数数据集与分组后的人口数据 merged_df = df_params.merge(grouped_actual, on='type', how='left') # 统计符合条件的数量 df_params['available_population'] = merged_df.apply( lambda row: np.sum(np.array(row['actual_score']) >= row['required_score']), axis=1 )
内容的提问来源于stack exchange,提问作者lb_so
相关产品推荐
相关产品推荐

