【发布时间】:2021-09-19 22:10:00
【问题描述】:
我有一个如下所示的数据集:
id count
A. 2
A. 10
B. 3
B. 13
B. 11
C. 2
C. 3
我需要为每个 ID 汇总“计数”值的总和和平均值。使用熊猫,我正在做这样的事情:
stats = df.groupby('id').agg({'agg': ['sum', 'mean']})
我尝试使用 numpy 数组对此进行优化:
counts = df['count'].values
ids = df['id'].values
all_ids = df['id'].unique()
stats = [(i, np.mean(df[ids==i]), np.sum(df[ids==i])) for i in all_ids]
但是,这最终会比相应的 pandas 实现花费更多的时间。有没有办法加快速度(也许使用一些 numpy 功能?)
【问题讨论】:
-
数据框是否已经按 ID 排序?
-
您的意思是
df.groupby('id').agg(['sum', 'mean'])- 您当前的语法没有意义,因为您没有标记为'agg'的列?您还可以提供更多关于为什么内置性能没有切入的信息吗?这些操作开始时通常非常快,不是最佳的,但要爬上高山才能挤出一点额外的东西。但有可能您正在对str列求和(可能很慢),或者您有一个缺少值的分类,当它最终尝试重新索引时确实会减慢速度。
标签: python pandas numpy pandas-groupby aggregate