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_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 传入,然后根据需要定义函数。
推荐阅读
- python - 在 Python 中,如何将十六进制数转换为其对应的 unicode 字符?
- python - 在 google colab 中将图像转换为文本时出现 TesseractError: (2, 'Usage: pytesseract [-l lang] input_file') 错误
- python - 在ansible中使用shell运行python脚本,但似乎无法使用print()输出stdout
- python - Python用排列值替换字符串
- c# - 从类属性和字典构建单个 JSON 字符串
- spring - 在 Spring 批处理 MultiResourceItemReader 中保存文件信息
- python - 如何使用 CSS 获取信息?
- javascript - 如何理解echarts中显示的图表类型是什么?
- android - 拍摄非常宽的图像并将其裁剪到特定尺寸
- django - DRF:成功实现 put 方法后如何调用 post 方法