【问题标题】:How to select data with list of indexes from a partitioned DF (non-unique indexes)?如何从分区 DF(非唯一索引)中选择具有索引列表的数据?
【发布时间】:2017-04-12 08:59:50
【问题描述】:

问题

我有一个数据框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

我想不出其他解决方案...可能最后一个更有效,但不确定它是否真的可行。

【问题讨论】:

    标签: python dataframe indexing dask


    【解决方案1】:

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

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

    【讨论】:

    • 确实dask.delayed 是个好方法,结果证明速度够快。
    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    相关资源
    最近更新 更多