python - 内部映射适用于 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 制作兼容的解决方案?
解决方案
推荐阅读
- android - CollapsingToolbarLayout 中的中心工具栏标题
- mysql - 为什么 LEFT JOINing 将第二个表的 id 保留为 NULL?
- microsoft-graph-api - 如何使用 Microsoft Graph Api 访问组日历?
- linux - 通过 gstreamer udpsink 流式传输 h.264 时如何解决图像问题
- python - 无法从 Redis 订阅中获取数据?
- android - 父母知道内部孩子是否处理点击
- angular - 以角度编辑选定的卡片
- javascript - angular6 和 aspcore 中的动态 pmission
- azure - Azure DevOps (VSTS) - 在托管代理上使用 Azure Az PowerShell
- indexing - 匹配 Solr 中的确切短语