首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫重采样代码运行得非常慢

熊猫重采样代码运行得非常慢
EN

Stack Overflow用户
提问于 2019-04-17 07:24:18
回答 1查看 2.2K关注 0票数 3

我需要重新整理Pandas中的一些数据,我正在使用下面的代码:

根据我的数据,5 hours

代码语言:javascript
复制
df['date'] = pd.to_datetime(df['date'], format='%y-%m-%d')
df = df.set_index('date')
df.groupby('id').resample('D')['value'].agg('sum').loc[lambda x: x>0]

这太慢了。

如何在以下数据上加速上述代码:

代码语言:javascript
复制
id    date    value

1   16-12-1     9
1   16-12-1     8
1   17-1-1      18
2   17-3-4      19
2   17-3-4      20
1   17-4-3      21
2   17-7-13     12
3   17-8-9      12
2   17-9-12     11
1   17-11-12    19
3   17-11-12    21

giving output:

id  date      
1   2016-12-04    17
    2017-01-01    18
    2017-04-09    21
    2017-11-12    19
2   2017-03-05    39
    2017-07-16    12
    2017-09-17    11
3   2017-08-13    12
    2017-11-12    21
Name: value, dtype: int64

我将日期设置为索引,但代码太慢了。任何帮助都会很好。

EN

回答 1

Stack Overflow用户

发布于 2019-04-17 08:27:45

试试看。我将使用pd.Grouper()并指定每天的频率,希望它更快。另外,我正在摆脱agg,并立即使用.sum()

代码语言:javascript
复制
df['date'] = pd.to_datetime(df['date'], format='%y-%m-%d')
df = df.set_index('date')
df2 = df.groupby(['id',pd.Grouper(freq='D')])['value'].sum()

结果:

代码语言:javascript
复制
id  date      
1   2016-12-01    17
    2017-01-01    18
    2017-04-03    21
    2017-11-12    19
2   2017-03-04    39
    2017-07-13    12
    2017-09-12    11
3   2017-08-09    12
    2017-11-12    21

希望这能行。

编辑

因此,我只是在随机生成的有100000行的df上对这两种方法进行了一次小测试。

代码语言:javascript
复制
df = pd.DataFrame(np.random.randint(0, 30,size=100000),
                  columns=["id"],
                  index=pd.date_range("19300101", periods=100000))
df['value'] = np.random.randint(0, 10,size=100000)

并对这两种代码进行了试验,结果如下:

用于使用resmple

代码语言:javascript
复制
startTime = time.time()
df2 = df.groupby('id').resample('D')['value'].agg('sum').loc[lambda x: x>0]
print(time.time()-startTime)
1.0451831817626953 seconds

用于使用pd.Grouper()

代码语言:javascript
复制
startTime = time.time()
df3 = df.groupby(['id',pd.Grouper(freq='D')])['value'].sum()
print(time.time()-startTime)
0.08430838584899902 seconds

所以大约快12倍!(如果我的数学是正确的)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55722068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档