如何解决在非常大的数据帧中使用掩码进行有效的条件选择
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)在几秒钟内解决了接近一小时...
解决方法
@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)
输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。