在pandas中对唯一值应用函数以提高效率



这是一个关于如何在pandas中有效地应用函数的一般性问题。我经常遇到需要将函数应用于pd.Series的情况,并且只将函数应用于唯一值会更快。

例如,假设我有一个非常大的数据集。一列是date,我想添加一列,给出date的最后一个季度的日期。我会这样做:

mf['qtr'] = pd.Index(mf['date']) + pd.offsets.QuarterEnd(0)

但是对于大型数据集,这可能需要一段时间。因此,为了加快速度,我将提取date的唯一值,对这些值应用函数,然后将其合并回原始数据:

dts = mf['date'].drop_duplicates()
eom = Series(pd.Index(dts) + pd.offsets.QuarterEnd(0), index=dts)
eom.name = 'qtr'
mf = pd.merge(mf, eom.reset_index())

这比上面的一行代码快得多。

所以我的问题是:这真的是做这件事的正确方法吗,还是有更好的方法?

并且,给pandas添加一个功能来自动采用这种独特的/apply/merge方法是否有意义和可行?(它不适用于某些函数,例如依赖于滚动数据的函数,因此可能用户必须显式请求此行为。)

我个人只对日期列进行分组,然后为每个组调用函数:

mf.groupby('date',as_index=False)['date'].apply(lambda x: x + pd.offsets.QuarterEnd(0))

我想应该可以

编辑

好的,上面的不起作用,但下面的可以,但我认为这是有点扭曲:

mf.groupby('date', as_index=False)['date'].apply(lambda x: (pd.Index(x)+ QuarterEnd(0))[0])

我们为每个日期创建一个datetimeindex,添加偏移量,然后访问单个元素以返回值,但我个人认为这不是很好。

最新更新