Rob*_*b P 5 python group-by pandas pandas-groupby
这是我第一次问一个问题。
我正在使用大型CSV数据集(它包含超过1500万行,并且大小超过1.5 GB)。
我正在将摘录加载到在Jupyter Notebooks中运行的Pandas数据帧中,以基于数据集导出算法。我按MAC地址对数据进行分组,结果得出1+百万个分组。
我的算法开发的核心是运行此操作:
pandas.core.groupby.DataFrameGroupBy.filter
Run Code Online (Sandbox Code Playgroud)
运行此操作需要3到5分钟,具体取决于数据集。要开发此算法,我必须执行此操作数百次,也许数千次。
此操作似乎受CPU限制,并且仅使用计算机上可用的几个内核之一。我花了几个小时在线研究潜在的解决方案。我试图同时使用这两种方法numba并dask加快此操作的速度,但两次尝试均导致异常。
Numba提供了一条信息,表示“这不应该发生,谢谢您帮助改进产品”。看起来Dask可能未实现DataFrameGroupBy.filter操作。我无法确定如何使用pool/ 重写代码map。
我正在寻找有关如何加快此操作的建议:
pandas.core.groupby.DataFrameGroupBy.filter
Run Code Online (Sandbox Code Playgroud)
这是我的代码中此操作的示例。还有其他示例,所有这些示例似乎都具有大约相同的执行时间。
import pandas as pd
def import_data(_file, _columns):
df = pd.read_csv(_file, low_memory = False)
df[_columns] = df[_columns].apply(pd.to_numeric, errors='coerce')
df = df.sort_values(by=['mac', 'time'])
# The line below takes ~3 to 5 minutes to run
df = df.groupby(['mac']).filter(lambda x: x['latency'].count() > 1)
return df
Run Code Online (Sandbox Code Playgroud)
我怎样才能加快速度?
filter通常已知与 一起使用时速度很慢GroupBy。如果您尝试根据 GroupBy 内的条件过滤 DataFrame,更好的选择是使用transformor map:
df[df.groupby('mac')['latency'].transform('count').gt(1)]
Run Code Online (Sandbox Code Playgroud)
df[df['mac'].map(df.groupby('mac')['latency'].count()).gt(1)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |