使用日期时间索引会减慢群组在熊猫中的应用吗?

时间:2017-05-22 13:26:15

标签: python performance pandas numpy

我有一个具有以下结构的Pandas DataFrame(大约1亿行):

Date     Value  ID
'1/1/17' 500    1
'1/2/17' 550    1
'1/4/17' 600    2

如果我这样做:

def get_coeff_var(group):
    group['coeff_var'] = group['Value'].std()/group['Value'].mean()
    return group

df = df.groupby(['ID']).apply(lambda x: get_coeff_var(x))

它完成得非常快。

但是如果我首先将索引设置为日期并获得数据的最后一个月,那么相同的apply函数需要一个巨大的(即我甚至不能等待它完成)时间量:

df = df.set_index('Date')
df = df.last('1M')
df = df.groupby(['ID']).apply(lambda x: get_coeff_var(x))

发生了什么?

1 个答案:

答案 0 :(得分:1)

几乎总是,在一个groupby-apply内变异是一个坏主意 - 通常它需要一个缓慢的路径,虽然我不确定这里究竟是什么问题。

在您的情况下,执行此转换的惯用方法和更快速的方法如下所示,无论您的索引如何,都应该快速。

gb = df.groupby('ID')['Value']
df['coeff_var'] = gb.transform('std') / gb.transform('mean')