亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 pandas .isin 比“in”快得多?

為什么 pandas .isin 比“in”快得多?

aluckdog 2022-06-07 19:27:14
我正在我的 DataFrame 中創建一個指示列來表示不同列的值是否在列表中。我的第一次嘗試使用了基本的 python "in" 操作符,我的進度條顯示它需要 83 小時才能運行。然后我嘗試使用熊貓“.isin()”,不到一秒鐘。我的 DataFrame 有大約 40,000,000 行,我正在搜索的列表有大約 100,000 個項目。該列表已被過濾以刪除重復項 (lst=list(set(original_list)))。我比較的項目是大約 20 個字符的字符串。這是我的第一次嘗試(需要 83 小時):df['indicator']=df['col1'].progress_apply(lambda x: 1 if x in lst else 0)這是我的第二次嘗試(不到一秒鐘):df['indicator']=df['col1'].isin(tqdm(lst))誰能解釋為什么第二個會導致如此巨大的改進?為什么 Pandas .isin() 方法比“==”更快的答案并沒有真正解釋它。
查看完整描述

1 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

兩種方法之間的差異主要是由x in X操作的性能引起的。O(size_of_X)當 X 是一個列表并且O(1)X 是一個集合時,這個測試是復雜的。


如果您將 lst 轉換為setbefore progress_apply,您將獲得與Series.isin


這是一個快速基準


SERIES = pd.Series([str(i) for i in range(100000)])

LIST = [str(i) for i in range(-10000, 10000)]


%timeit SERIES.isin(LIST)

# 9.2 ms


SERIES.map(lambda x: x in LIST)

# 22000 ms


%timeit SET = set(LIST); SERIES.map(lambda x: x in SET)

# 24.8 ms


查看完整回答
反對 回復 2022-06-07
  • 1 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號