簡體   English   中英

檢查一個列表中的任何值是否存在於另一個列表中(最快的解決方案)

[英]Check if any value in one list is present in another list (fastest solution)

我有一個包含 100 萬行和 10 列的DataFrame 每列是一個元素列表(它可能是一個空列表或最多包含 5 個元素的列表)。 假設我有另一個具有 100000 個元素的 lsit ,我只想過濾DataFrame中給定列(例如columnA )包含我的 100000 個元素的大列表中的任何元素的那些行。 這是我當前的代碼:

df = df[df["columnA"].apply(lambda x: any(value in valuesList for value in x))]

但是計算它需要大量的時間。 如何加快代碼速度?

你的算法的復雜度是 O(n^3)。 第一個 n 用於遍歷所有行。 第二個 n 用於遍歷單元格中的所有值。 第三個 n 用於遍歷您比較單元格值的列表項(通過檢查列表是否包含特定值來完成)。 正如@Marat 建議的那樣:使用一套。 檢查一個集合是否包含特定值是常數時間 O(1)。 這將復雜度降低到 O(n^2)。

s = set(valuesList)
df = df[df["columnA"].apply(lambda x: any(value in s for value in x))]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM