gpt4 book ai didi

python - 为什么 resample 在 groupby 中比 pd.Grouper 慢得多?

转载 作者:行者123 更新时间:2023-11-28 18:10:25 30 4
gpt4 key购买 nike

根据 pandas documention

resample() is a time-based groupby, followed by a reduction method on each of its groups.

但是,在比较 groupby 中 resamplepd.Grouper 的使用时,我注意到性能存在巨大差异(有利于 pd.Grouper)

我有一个数据框,其中每一行代表某一天某种类型(想想传感器)的值。它看起来像这样:

date         type  value
2018-01-01 1 12
2018-01-02 1 14
....
2018-01-01 2 12
....

在那个数据框上

df.set_index('DT').sort_index().groupby(['type']).resample('W').first()

df.groupby(['type', pd.Grouper(key='DT', freq='W')]).first()

做同样的事情。然而,在下面的示例数据集上,resample 方法比 pd.Grouper 方法慢约 30 倍(这与我在真实数据集上观察到的一致)。

这种性能下降从何而来?

# Creating the frame
date_range = pd.date_range(start=dt.datetime(2017,1,1), end=dt.datetime(2025,12,31), freq='W')
to_concat = []
for val in range(1,100):
frame_tmp = pd.DataFrame()
frame_tmp['DT'] = date_range
frame_tmp['type'] = val
frame_tmp['value'] = np.random.randint(1, 6, frame_tmp.shape[0])
to_concat.append(frame_tmp)

df = pd.concat(to_concat, ignore_index=True)

%%timeit
df.set_index('DT').sort_index().groupby(['type']).resample('W').first()

%%timeit
df.sort_values('DT').groupby(['type', pd.Grouper(key='DT', freq='W')]).first()

# Checking that they are indeed equals
res_groupby = df.sort_values('DT').groupby(['type', pd.Grouper(key='DT', freq='W')]).first()
res_resample = df.set_index('DT').sort_index().groupby(['type']).resample('W').first()
pd.DataFrame.equals(res_groupby, res_resample[['value']] )

最佳答案

事实上它们是等价的,这个例子设计得很糟糕。相反,如果您在 date_range 中使用 freq='14D',则帧将不相同。 res_resample 将包含带有 NaN 的行(每隔一周),而 res_groupby 根本不会包含它们。

确实,在等效情况下,resample 似乎更慢,但它们不是一回事,因此无法真正比​​较。

关于python - 为什么 resample 在 groupby 中比 pd.Grouper 慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51050157/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com