熊猫系列是否有 reduce
的模拟?
例如, map
的模拟是 pd.Series.apply ,但我找不到 reduce
的任何模拟。
我的应用程序是,我有一个 pandas 系列列表:
>>> business["categories"].head()
0 ['Doctors', 'Health & Medical']
1 ['Nightlife']
2 ['Active Life', 'Mini Golf', 'Golf']
3 ['Shopping', 'Home Services', 'Internet Servic...
4 ['Bars', 'American (New)', 'Nightlife', 'Loung...
Name: categories, dtype: object
我想使用 reduce
将一系列列表合并在一起,如下所示:
categories = reduce(lambda l1, l2: l1 + l2, categories)
但这需要很长时间,因为将两个列表合并在一起是 O(n)
在 Python 中的时间。我希望 pd.Series
有一种矢量化的方式来更快地执行此操作。
原文由 hlin117 发布,翻译遵循 CC BY-SA 4.0 许可协议
在值上加上
itertools.chain()
这可能会更快:
表现
对于这个数据集
chain
ing 大约快 68 倍。矢量化?
当您拥有原生 NumPy 数据类型时,向量化就起作用了(毕竟 pandas 使用 NumPy 作为其数据)。由于我们已经在 Series 中有列表并且想要一个列表作为结果,因此矢量化不太可能加快速度。标准 Python 对象和 pandas/NumPy 数据类型之间的转换可能会耗尽您从矢量化中获得的所有性能。我曾尝试在另一个答案中对算法进行矢量化。