多个索引的任务和最佳实践

问题描述 投票:0回答:1

看起来我遗漏了一些关于如何在 Dask 中使用 DataFrame 索引的非常基本的东西。

我有一个 DataFrame,其中大部分排序和过滤都是在列

date
上完成的,所以下面

https://docs.dask.org/en/stable/dataframe-best-practices.html

具体

Dask DataFrame 可以选择性地沿着单个索引列进行排序。 针对此列的某些操作可能非常快。例如,如果 您的数据集按时间排序,您可以快速选择数据 特定的一天,执行时间序列连接等。

我决定把索引设为

date
。我很困惑是否有多个具有相同值的索引(即在同一确切日期的多个观测值)是否会构成问题,但文档暗示相反,我没有看到任何针对重复索引的警告,我继续并用

重新索引我的DataFrame
cur_df = cur_df.set_index('date', sorted=True)

然后我需要创建一个新专栏,我做了它

to_date_diff = lambda x : (x - cur_date).days/365
to_date_diff_meta = pd.Series([], dtype=float,  name='date_diff')
cur_df['date_diff'] = cur_df['final_date'].apply(to_date_diff, meta=to_date_diff_meta).compute()

但是我得到了错误

ValueError: cannot reindex on an axis with duplicate labels

所以我现在必须重新索引所有内容吗?哎呀!我希望在重新索引我所有的 DataFrame 之前知道!如果我仍然想对列“date”执行“非常快”的操作,但它不能作为索引,因为它有重复的值怎么办?

===编辑===

糟糕的是,我意识到问题不在于索引,而在于我最后一行的

.compute()

问题仍然存在: 我是否应该重新索引我的 DataFrame(具有唯一索引?我什至不确定唯一索引在 Dask 中是否存在,因为不同的分区会始终从 0 开始重置它们的索引)或不(具有以某种方式干扰多个索引)? 我希望它在某处指定,我只是在文档中找不到任何明确的提示。

python indexing dask dask-dataframe
1个回答
1
投票

这种问题经常出现,您可能会发现使用 map_partitions 函数操作更容易,将您的 pandas 操作封装在一个步骤中

def map_me(df):
    to_date_diff = lambda x : (x - cur_date).days/365
    df['date_diff'] = df['final_date'].apply(to_date_diff)

out = cur_df.map_partitions(map_me, meta=...)

提供

meta
是可选的。

© www.soinside.com 2019 - 2024. All rights reserved.