小编Phi*_*hik的帖子

性能问题将带有开始端的行转换为带有TimeIndex的数据帧

我有一个大型数据集,其中每一行代表某个时间间隔(开始和结束之间)的某种类型(想象传感器)的值.它看起来像这样:

    start       end    type value
2015-01-01  2015-01-05  1   3
2015-01-06  2015-01-08  1   2
2015-01-05  2015-01-08  3   3
2015-01-13  2015-01-16  2   1
Run Code Online (Sandbox Code Playgroud)

我想将它变成每日时间索引框架,如下所示:

day       type  value
2015-01-01  1   3
2015-01-02  1   3
2015-01-03  1   3
2015-01-04  1   3
2015-01-05  1   3
2015-01-06  1   2
2015-01-07  1   2
2015-01-08  1   2
2015-01-05  3   3
2015-01-16  3   3
2015-01-07  3   3
2015-01-08  3   3
2015-01-13  2   1
2015-01-14  2   1
2015-01-15  2   1
2015-01-16  2   1
Run Code Online (Sandbox Code Playgroud)

(请注意,我们不能对间隔做出任何假设:它们应该是连续的且不重叠但我们不能保证)

基于这些Stack Overflow答案[1](日期范围上的DataFrame重新采样)[2]( …

python datetime dataframe pandas

6
推荐指数
1
解决办法
114
查看次数

为什么在 groupby 中 resample 比 pd.Grouper 慢很多?

根据pandas 文档

resample() 是一个基于时间的分组,然后对其每个组进行缩减方法。

然而,在比较groupby 中resamplevs的使用时,我注意到性能上存在巨大差异(有利于)pd.Grouperpd.Grouper

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

date         type  value
2018-01-01   1     12
2018-01-02   1     14
....
2018-01-01   2     12
....
Run Code Online (Sandbox Code Playgroud)

在该数据框上

df.set_index('DT').sort_index().groupby(['type']).resample('W').first()
Run Code Online (Sandbox Code Playgroud)

df.groupby(['type', pd.Grouper(key='DT', freq='W')]).first()
Run Code Online (Sandbox Code Playgroud)

做完全相同的事情。然而,在下面的示例数据集上,该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', …
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
2040
查看次数

标签 统计

pandas ×2

python ×2

dataframe ×1

datetime ×1