基于Pandas提取列组合并统计出现次数的技术咨询
任务2:高效统计字典中各列的出现次数
用于统计的映射表格如下:
| id | country | city | age | sex |
|---|---|---|---|---|
| 1 | 1 | NAN | NAN | NAN |
| 2 | 1 | 8 | NAN | NAN |
需求说明
需要基于上述映射表格,统计任务1生成的字典列表中各列的出现次数,要求方案高效,支持参数提取与迭代统计,避免繁琐的硬编码。
高效实现思路
先构建id到对应列的映射字典,再遍历任务1的结果列表,提取每个字典中的id值,关联映射表中的列并累加计数:
from collections import defaultdict # 构造任务2的DataFrame(实际场景可从文件/数据库读取) df_task2 = pd.DataFrame( [ [1, 1, pd.NA, pd.NA, pd.NA], [2, 1, 8, pd.NA, pd.NA], ], columns=["id", "country", "city", "age", "sex"] ) # 第一步:构建id到对应非NAN列的映射 id_to_cols = {} for _, row in df_task2.iterrows(): current_id = row["id"] # 获取当前id对应的非NAN列名(排除id列) relevant_cols = row.drop("id").dropna().index.tolist() id_to_cols[current_id] = relevant_cols # 第二步:统计各列出现次数 column_counts = defaultdict(int) for item in result_list: # 提取当前字典中所有id_qname_*对应的id值 id_values = [val for key, val in item.items() if key.startswith("id_qname_")] # 遍历每个id,累加对应列的计数 for id_val in id_values: for col in id_to_cols.get(id_val, []): column_counts[col] += 1 # 转换为普通字典查看结果 print(dict(column_counts)) # 输出:{'country': 3, 'city': 2}
方案优势
- 映射关系动态构建,无需硬编码列名,扩展性强
- 迭代过程逻辑清晰,时间复杂度为O(n+m)(n为任务1行数,m为任务2行数),效率较高
内容的提问来源于stack exchange,提问作者Hrvoje
相关产品推荐
相关产品推荐

