如何从分区DF(非唯一索引)中选择包含索引列表的数据?

时间:2017-04-12 08:59:50

标签: python dataframe indexing dask

问题

我有一个数据帧df,索引不是单调增加超过4个分区,这意味着每个分区都用[0..N]索引。 我需要根据索引列表[0..M]选择行,其中M> N. 使用loc会产生不一致的输出,因为有0索引的多行(参见示例)。

换句话说,我需要克服Dask和Pandas'reset_index之间的区别,因为它很容易解决我的问题。

实施例

print df.loc[0].compute()导致:

   Unnamed: 0  best_answer  thread_id  ty_avc    ty_ber  ty_cjr  ty_cpc  \
0           0            1          1       1  0.052174       9      18   
0           0            1       5284      12  0.039663      34      60   
0           0            1      18132       2  0.042254       7      20   
0           0            1      44211       4  0.025000       5       5   

可能的解决方案

  1. df重新分区为1个分区和reset_index,不喜欢内存不适合;
  2. 添加一个包含[0..M]索引的列并使用set_index,不鼓励performance tips;
  3. question的解决方案解决了另一个问题,因为他的df具有唯一索引;
  4. 拆分npartitions部分中的索引列表,应用偏移量计算并使用map_partitions
  5. 我想不出其他解决方案......可能最后一个解决方案效率更高,但不确定它是否真的可行。

1 个答案:

答案 0 :(得分:2)

通常,Dask.dataframe不会跟踪构成dask.dataframe的pandas数据帧的长度。我怀疑你的选择4是最好的。您也可以考虑使用dask.delayed

另见http://dask.pydata.org/en/latest/delayed-collections.html