如何用SQL统计同一行多列中各值的出现次数?
实现行内多列值的频次统计
问题说明
给定如下数据集:
| COL1 | COL2 | COL3 |
|---|---|---|
| A | B | A |
| C | D | C |
需要统计每行多列中每个值的出现次数,预期输出:
2A 1B and 2C 1D
实现方法(Python + Pandas)
用Pandas可以快速实现行内频次统计,代码如下:
import pandas as pd # 构造数据集(实际场景可替换为读取Excel/CSV文件) data = { "COL1": ["A", "C"], "COL2": ["B", "D"], "COL3": ["A", "C"] } df = pd.DataFrame(data) # 定义行处理函数 def process_single_row(row): # 统计当前行各值的出现次数 value_counts = row.value_counts().sort_index() # 拼接成"次数+值"的格式 result_parts = [f"{count}{value}" for value, count in value_counts.items()] # 按预期格式调整(第一行末尾加"and") if row.name == 0: return " ".join(result_parts) + " and " return " ".join(result_parts) # 应用函数到每一行 output_lines = df.apply(process_single_row, axis=1) # 打印结果 for line in output_lines: print(line)
代码解释
- 数据构造/读取:用字典构造示例数据,实际使用时可通过
pd.read_excel()或pd.read_csv()读取外部表格 - 行处理函数:
row.value_counts():统计当前行每个值的出现次数sort_index():保证结果按值的字母顺序排列(和示例一致)- 列表推导式将频次和值拼接为指定格式的字符串
- 根据行索引判断是否添加"and",匹配预期输出格式
- 结果输出:遍历处理后的结果,逐行打印
备选方案(Excel公式)
如果用Excel处理,可针对每行写嵌套公式,以第一行为例:
- 统计A的次数:
=COUNTIF(A2:C2,"A") - 拼接为
2A:=COUNTIF(A2:C2,"A")&"A" - 组合所有结果:
=COUNTIF(A2:C2,"A")&"A"&" "&COUNTIF(A2:C2,"B")&"B"&" and "
这种方法适合小数据集,数据量大时不如代码高效。
内容的提问来源于stack exchange,提问作者sinergy
相关产品推荐
相关产品推荐

