【发布时间】:2018-08-13 22:00:49
【问题描述】:
我目前正在处理一个较小的数据集(大约 900 万行)。不幸的是,大多数条目都是字符串,即使对类别进行强制转换,帧也只有几 GB 的内存。
我想做的是将每一行与其他行进行比较,并对内容进行直接比较。例如,给定
A B C D
0 cat blue old Saturday
1 dog red old Saturday
我想计算
d_A d_B d_C d_D
0, 0 True True True True
0, 1 False False True True
1, 0 False False True True
1, 1 True True True True
显然,组合爆炸将排除 每个 记录与所有其他记录的比较。所以我们可以改为使用阻塞,通过应用 groupby,比如在 A 列上。
我的问题是,有没有办法在 pandas 或 dask 中做到这一点,比以下序列更快:
- 按索引分组
- 外部将每个组连接到自身以产生对
- dataframe.apply 对每一行对的比较函数
作为参考,假设我可以访问大量内核(数百个)和大约 200G 的内存。
【问题讨论】:
-
您是否需要知道行之间是否完全相等,或者您是否需要知道它们的不同之处(如您提供的输出 DataFrame 中)?
-
我需要知道它们的不同之处。
标签: python pandas pandas-groupby dask