首页 > 解决方案 > 连接具有相同分区数但列数不同的两个数据帧(dask)

问题描述

我有两个分区数相同的数据帧。我想连接这些数据帧(第一个分区与第一个分区,第二个与第二个分区等)因此,最终数据帧具有初始分区数(V),每个分区中的行数相同( n) 但列数不同(数据框一和数据框二的列数之和(n+m))。第一个数据帧 ( A) 有一个时间戳作为索引,但第二个数据帧 (B) 没有此列。两个数据框都已排序,我只需要将这些数据集放在一起,而不会对每个分区进行任何更改。此外,索引A将是新数据帧的索引。

A: data-frame (V partitions) - every partition (nXn)
B: data-frame (V partitions) - every partition (nXm)

C (new data-frame): (V partitions) - every partition (nX(n+m))

标签: pythonpandasdataframedask

解决方案


这并不难:

C = dd.from_delayed([dask.delayed(pd.concat)([a, b])
    for a, b in zip(A.to_delayed(), B.to_delayed())],
    meta=A._meta)

解释

  • 将每个数据帧的分区作为延迟对象
  • 将这些对传递给concat
  • 将连接的对形成回数据帧
  • 重用元,因为输出具有与输入相同的列和索引

(C当然还是懒惰的,只有对它做点什么才会触发操作)


推荐阅读