首页 > 解决方案 > 内部映射适用于 pandas/dask

问题描述

我有一些数据框,每个 id 都有时间信息,每个人大约 30 个周期。问题是我必须计算某些列的净现值,按 id 聚合。尽管这是一项简单的任务,但我必须对很多列重复此操作,甚至对于一些新的转换。

我最初的解决方案是这样的:

import pandas as pd

    def npv(db, rate):
        count=1
        a=[]
        for i in db:
            a.append(i/(1+rate)**count)
            count+=1
        return sum(a)


    db=pd.read_csv("file_dir")
    group=db.groupby('id')
    npvs=group['column'].apply(lambda x: npv(x, 0.1))

然后我通常会创建一个新列,在其中插入每个人每个时期重复的现值,如下所示:

db['new_column']=db.id.map(lambda x: npvs[x])

只是为了保持原始格式(尽管这没有意义)。

有了这个,我必须对我想要的每一列重复操作,而不是将函数应用于列列表,这可以节省我的时间。我想要一个更优雅的解决方案,可以在应用程序中有效地映射。map之后可能会应用一个解决方案apply,为每个时期创建一个包含折扣因子的列,然后对这些值求和。问题是我必须为很多人应用这个解决方案,我无法将大约 40Gb 的文件加载到 pandas 中。

我已经尝试过使用 dask,但它不允许像在我的函数中那样迭代每个组。

有什么想法可以在 pandas 上更优雅地实现这一点,或者我如何使用 dask 制作兼容的解决方案?

标签: pythonpandasdask

解决方案


推荐阅读