Pandas DataFrame高效查找:如何快速計(jì)算當(dāng)前行值上方比其大的數(shù)據(jù)個(gè)數(shù)?

Pandas DataFrame高效查找:如何快速計(jì)算當(dāng)前行值上方比其大的數(shù)據(jù)個(gè)數(shù)?

pandas高效數(shù)據(jù)處理:快速查找上方較大數(shù)值的計(jì)數(shù)

本文介紹使用Pandas高效處理數(shù)據(jù),解決在DataFrame中查找特定列當(dāng)前行值上方比其大的數(shù)據(jù)個(gè)數(shù)的問題。 具體問題:給定一個(gè)三列DataFrame,需要添加一列col4,col4的值表示從當(dāng)前行col3的值向上查找,直到遇到第一個(gè)大于當(dāng)前值的值,計(jì)算兩者之間包含的行數(shù)。

示例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

目標(biāo)是添加col4列,滿足上述條件。例如,第4行col3值為9.6,向上查找,直到遇到大于9.6的值(第7行11.1),之間有3行(第4,5,6行),所以col4值為3。

循環(huán)方法效率低,以下使用numpy的矩陣運(yùn)算,避免顯式循環(huán):

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)

代碼定義一個(gè)列表推導(dǎo)式,遍歷DataFrame,使用NumPy的sum函數(shù)高效計(jì)算比當(dāng)前值大的元素個(gè)數(shù)。此方法在處理大量數(shù)據(jù)時(shí),效率遠(yuǎn)高于循環(huán)方法。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享