2017-08-10 59 views
0

所以,我有以下几点:替代“应用”上熊猫的GroupBy对象

timeDiffFunc = lambda x: x['CP_EX_DT'] - x['CP_EX_DT'].shift(1) 
exTimeDiff = assetGrp.apply(timeDiffFunc).fillna(0).reset_index(level=1) 

但这使用了我的系统崩溃(类似的问题在这里看到:Memory leak in Pandas.groupby.apply()?)这么多的内存

我问题是,我如何将其转换为不使用apply函数的代码?我试过的变化:

for i, (name,grp) in enumerate(assetGrp): 
    grp = grp['CP_EX_DT'] - grp['CP_EX_DT'].shift(1) 
exTimeDiff = assetGrp.fillna(0).reset_index(level=1) 

但总是收到这样的错误:试图将结果合并到数据帧时NotImplementedError: Index._join_level on non-unique index is not implemented

任何意见将不胜感激。

+1

现在我只是好奇,但如果你用'.diff()'替换apply函数会发生什么?像assetGrp.diff() – Uvar

+0

您的数据剪切和你想要的输出看起来像会有所帮助。采取前5行,应用您的操作,并粘贴您的输出。 –

回答

0

根据上面的Uvar的评论,assetGrp.diff()做了相同的事情,并且内存开销更低。