在這里,我正在尋找在名為“word”的列上具有給定值的行索引,請注意,df 是一個具有許多列但在“word”列上按字母順序排序的資料框。
這是我的功能
def getIndex(df,givenword):
index=df[df['word']==givenword].index.values[0]
return index
問題是df非常大(大約 10000k 行),這個函式在 30000 givenword 的回圈中被呼叫。搜索性能很糟糕,您是否建議更好的實作來優化我的功能。
uj5u.com熱心網友回復:
我建議idxmax:
def getIndex(df,givenword):
index = df[df['word'] == givenword].idxmax()
return index
idxmax將給出此處最大值第一次出現的索引,在本例中為True。
uj5u.com熱心網友回復:
如果 DataFrame 按字母順序排序,請使用searchsorted,請參閱下面的玩具示例:
import pandas as pd
ser = pd.Series(["fox", "hello", "jump", "world"])
res = ser.searchsorted("jump")
print(res)
輸出
2
您甚至可以傳遞整個單詞串列,如下所示:
res = ser.searchsorted(["fox", "hello"])
print(res)
輸出
[0 1]
這種方法的時間復雜度是 O(mlogn),其中 m 是要搜索的詞的數量,n 是 DataFrame 的大小。注意:您需要檢查單詞是否與索引相對應,因為searchsorted搜索需要插入單詞的位置。
另一種方法是創建一個字典,將單詞映射到第一次出現,然后搜索單詞:
lookup = {key: value for key, value in zip(ser.values[::-1], ser.index[::-1])}
words = ["jump", "world"]
res = [lookup[word] for word in words]
print(res)
輸出
[2, 3]
這種方法的時間復雜度是 O(n m)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329504.html
