超大数据帧中带掩码的高效条件选择

2024-06-26 14:08:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大约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_是_Chris,@papke,@paul brennan)。 我想做一个时间比较,但提供的解决方案(groupby)在几秒钟内解决了它,而不是近一个小时


Tags: 数据方法indf列表for时间dt
2条回答

@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传入,然后根据需要定义函数

mins = df.groupby("num")["dt"].min()
print(mins)

输出:

enter image description here

相关问题 更多 >