基于Pandas DataFrame按ITEM分组获取对应统计数据的问询
Pandas分组统计与分组数量匹配的实现
要实现按ITEM分组后获取统计数据,且结果行数与分组数完全一致,直接使用Pandas的groupby结合聚合操作即可,以下是具体实现方案:
基础分组统计示例
以计算每个ITEM分组下各统计列的均值、总和为例:
import pandas as pd data = {'ITEM': ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'z', 'z', 'z', 'z'], 'Stat.1': [37, 84, 54, 72, 49, 20, 64, 75, 90, 71, 84, 46, 78, 24, 34], 'Stat.2': [27, 44, 43, 12, 92, 10, 24, 55, 50, 37, 44, 57, 38, 64, 17], 'Stat.3': [17, 54, 64, 68, 39, 50, 34, 65, 40, 72, 44, 56, 48, 94, 37], } df = pd.DataFrame(data) # 按ITEM分组,对各统计列执行多维度统计 stats_result = df.groupby('ITEM').agg({ 'Stat.1': ['mean', 'sum'], 'Stat.2': ['mean', 'sum'], 'Stat.3': ['mean', 'sum'] }).reset_index() print(stats_result)
核心要点
groupby('ITEM')会自动按ITEM的唯一值分组,示例中ITEM有5个唯一值(a、b、c、d、z),最终结果将保留5行分组数据agg()支持为不同列指定不同的统计函数,可同时完成多种统计计算reset_index()将分组键ITEM从索引转为普通列,便于后续的数据处理与查看
自定义统计逻辑实现
如果需要个性化统计规则(比如计算分组内最大值与最小值的差值),可传入自定义函数:
def range_calc(x): return x.max() - x.min() custom_stats = df.groupby('ITEM').agg({ 'Stat.1': range_calc, 'Stat.2': ['max', 'min'], 'Stat.3': 'median' }).reset_index() print(custom_stats)
无论使用哪种统计方式,最终结果的行数都会与ITEM的分组数量完全匹配。
内容的提问来源于stack exchange,提问作者888Seeme
相关产品推荐
相关产品推荐

