本文目录导读:

我来介绍几种常见的数据分组统计方法,针对不同的脚本语言和场景:
Python(最常用)
使用原始 Python
# 示例数据
data = [
{"category": "A", "value": 10},
{"category": "B", "value": 20},
{"category": "A", "value": 15},
{"category": "C", "value": 30},
]
# 分组统计
from collections import defaultdict
grouped = defaultdict(list)
for item in data:
grouped[item["category"]].append(item["value"])
# 统计总和
result = {k: sum(v) for k, v in grouped.items()}
print(result) # {'A': 25, 'B': 20, 'C': 30}
# 统计平均值
result_avg = {k: sum(v)/len(v) for k, v in grouped.items()}
使用 Pandas
import pandas as pd
df = pd.DataFrame(data)
# 单列分组
result = df.groupby('category')['value'].sum()
# 多列分组
result = df.groupby(['category', 'sub_category']).agg({
'value': ['sum', 'mean', 'count']
})
# 常用聚合函数
# sum(), mean(), count(), max(), min(), std(), first(), last()
JavaScript
在 Node.js 中
// 示例数据
const data = [
{ category: 'A', value: 10 },
{ category: 'B', value: 20 },
{ category: 'A', value: 15 },
{ category: 'C', value: 30 },
];
// 分组统计
function groupBy(arr, key, statistic) {
const grouped = arr.reduce((acc, item) => {
const groupKey = item[key];
if (!acc[groupKey]) {
acc[groupKey] = [];
}
acc[groupKey].push(item.value);
return acc;
}, {});
// 统计总和
if (statistic === 'sum') {
for (let key in grouped) {
grouped[key] = grouped[key].reduce((sum, val) => sum + val, 0);
}
}
return grouped;
}
console.log(groupBy(data, 'category', 'sum'));
// { A: 25, B: 20, C: 30 }
Shell 脚本
使用 awk
# 示例数据 (data.txt)
# A 10
# B 20
# A 15
# C 30
# 分组求和
awk '{sum[$1] += $2} END {for (k in sum) print k, sum[k]}' data.txt
# 输出: A 25
# B 20
# C 30
# 分组计数
awk '{count[$1]++} END {for (k in count) print k, count[k]}' data.txt
使用 sort + uniq
# 分组计数
cat data.txt | cut -d' ' -f1 | sort | uniq -c
# 输出: 2 A
# 1 B
# 1 C
# 分组求和
cat data.txt | awk '{sum[$1]+=$2; count[$1]++} END {for(k in sum) print k, sum[k], sum[k]/count[k]}'
SQL 风格(适用于数据库)
-- 基本分组统计 SELECT category, SUM(value) as total, AVG(value) as avg, COUNT(*) as count FROM table_name GROUP BY category; -- 多列分组 SELECT category, sub_category, SUM(value) as total FROM table_name GROUP BY category, sub_category;
可选的分组统计函数模板
Python 通用函数
def group_statistics(data, group_keys, agg_func):
"""
通用分组统计函数
Args:
data: 数据列表
group_keys: 分组键名
agg_func: 聚合函数字典 {'field': ['sum', 'mean', 'count']}
"""
result = {}
for item in data:
# 构建分组键
if isinstance(group_keys, list):
key = tuple(item[k] for k in group_keys)
else:
key = item[group_keys]
if key not in result:
result[key] = {'items': []}
result[key]['items'].append(item)
# 应用聚合函数
final_result = {}
for key, value in result.items():
final_result[key] = {}
for field, funcs in agg_func.items():
values = [item[field] for item in value['items']]
for func in funcs:
if func == 'sum':
final_result[key][f'{field}_{func}'] = sum(values)
elif func == 'mean':
final_result[key][f'{field}_{func}'] = sum(values)/len(values)
elif func == 'count':
final_result[key][f'{field}_{func}'] = len(values)
return final_result
# 使用示例
result = group_statistics(data, 'category', {'value': ['sum', 'mean', 'count']})
选择哪种方法取决于:
- 数据量大小(小数据用 Python/JS,大数据用 SQL/Pandas)
- 数据类型(结构化数据用 SQL,文本数据用 awk)
- 运行环境(本地脚本用 Python,Web 用 JS,服务器用 Shell)
需要针对特定场景的示例吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播