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)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END