首页 > 解决方案 > 在非常大的数据框中使用掩码进行有效的条件选择

问题描述

我有一个大约有 200 万行的数据框,如下所示:

                    dt   num
0  2019-05-12 10:17:00   135
1  2018-01-16 21:32:00     5
2  2017-11-30 22:29:00   135
3  2017-10-05 16:59:00    19
4  2017-08-07 05:26:00     5
5  2017-06-12 17:47:00    18

对于“num”列中的每个和所有不同值,我需要找到“dt”列的相应最小值。

我正在使用带有掩码的列表理解来执行此操作,然后是运算符:

[(num_i, df[df.num == num_i].dt.min()) for num_i in set(df.num)]

它有效,但它确实需要很多时间。还有其他更省时的解决方法吗?


哎呀...谢谢大家!(@It_is_Chris、@papke、@paul-brennan)。我正在考虑进行时间比较,但提供的解决方案(groupby)可以在几秒钟内解决它,而不是接近一小时......

标签: pythonpandasdataframeselectionmask

解决方案


@It_is_Chris 完全正确,如果您有更多可用内核,请将作业与 groupby 应用技巧并行。

from multiprocessing import Pool, cpu_count

def applyParallel(dfGrouped, func):
    with Pool(cpu_count()) as p:
        ret_list = p.map(func, [group for name, group in dfGrouped])
    return pandas.concat(ret_list)

所以将 df.groupby(df['num']) 作为 dfGrouped 传入,然后根据需要定义函数。


推荐阅读