Pandas高效数据处理:快速查找上方较大数值的计数
本文介绍使用Pandas高效处理数据,解决在DataFrame中查找特定列当前行值上方比其大的数据个数的问题。 具体问题:给定一个三列DataFrame,需要添加一列col4,col4的值表示从当前行col3的值向上查找,直到遇到第一个大于当前值的值,计算两者之间包含的行数。
示例DataFrame如下:
col1 col2 col3 0 5.5 2.5 10.0 1 2.0 4.5 1.0 2 2.5 5.2 8.0 3 4.5 5.8 4.8 4 4.6 6.3 9.6 5 4.1 6.4 9.0 6 5.1 2.3 3.0 7 5.1 2.3 11.1 8 5.1 2.3 10.0 9 5.1 2.3 11.1 10 5.1 2.3 20.0 11 5.1 2.3 31.0 12 5.1 2.3 5.0
登录后复制
目标是添加col4列,满足上述条件。例如,第4行col3值为9.6,向上查找,直到遇到大于9.6的值(第7行11.1),之间有3行(第4,5,6行),所以col4值为3。
循环方法效率低,以下使用NumPy的矩阵运算,避免显式循环:
import numpy as np import pandas as pd data = [[5.5, 2.5, 10.0], [2.0, 4.5, 1.0], [2.5, 5.2, 8.0],[4.5, 5.8, 4.8], [4.6, 6.3, 9.6],[4.1, 6.4, 9.0],[5.1, 2.3, 3],[5.1, 2.3, 11.1],[5.1, 2.3, 10],[5.1, 2.3, 11.1],[5.1, 2.3, 20],[5.1, 2.3, 31],[5.1, 2.3, 5]] df = pd.DataFrame(data, columns=['col1', 'col2', 'col3']) df['col4'] = [np.sum(df['col3'][:i+1].values > val) for i, val in enumerate(df['col3'])] print(df)
登录后复制
代码定义一个列表推导式,遍历DataFrame,使用NumPy的sum函数高效计算比当前值大的元素个数。此方法在处理大量数据时,效率远高于循环方法。
以上就是Pandas DataFrame高效查找:如何快速计算当前行值上方比其大的数据个数?的详细内容,更多请关注php中文网其它相关文章!