替代'应用'在Pandas GroupBy对象上

时间:2017-08-10 17:31:53

标签: python pandas

所以我有以下内容:

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 个答案:

答案 0 :(得分:0)

根据上面的Uvar评论,assetGrp.diff()做了同样的事情,内存开销要低得多。