但是,关于计算两个或更多系列组合的最佳方法的问题较少.解决方案呈现(1,2),但是,当和为什么要使用的每个没有讨论.
以下是三种潜在方法的基准测试.我有两个具体问题:
grouper效率更高count?我预计count它会更高效,因为它在C中实现.grouper即使列数从2增加到4 ,优越的性能仍然存在.value_counter表现不佳grouper?这是由于从列表构建列表或系列的成本吗?我理解输出是不同的,这也应该告知选择.例如,使用连续numpy数组与字典理解相比,按计数过滤更有效:
x, z = grouper(df), count(df)
%timeit x[x.values > 10] # 749µs
%timeit {k: v for k, v in z.items() if v > 10} # 9.37ms
Run Code Online (Sandbox Code Playgroud)
然而,我的问题的重点是在一系列与字典中建立可比较结果的表现.我的C知识是有限的,但我会感谢任何可以指出这些方法的基础逻辑的答案.
基准代码
import pandas as pd
import numpy as np
from collections import Counter
np.random.seed(0)
m, n = …Run Code Online (Sandbox Code Playgroud) 在中collections.Counter,该方法most_common(n)仅返回列表中的n个最频繁的项目。我确实需要这个,但是我也需要包括相等的计数。
from collections import Counter
test = Counter(["A","A","A","B","B","C","C","D","D","E","F","G","H"])
-->Counter({'A': 3, 'C': 2, 'B': 2, 'D': 2, 'E': 1, 'G': 1, 'F': 1, 'H': 1})
test.most_common(2)
-->[('A', 3), ('C', 2)
Run Code Online (Sandbox Code Playgroud)
我需要,[('A', 3), ('B', 2), ('C', 2), ('D', 2)]
因为在这种情况下它们的计数与n = 2相同。我的真实数据是DNA代码,可能很大。我需要它有些效率。