簡體   English   中英

如果列表包含特定值,如何刪除所有 Pandas 行?

[英]How to remove all Pandas rows of lists if they contain specific values?

我正在尋找一種方法如何從列表中刪除包含任何值的所有行:

詮釋:

df = pd.DataFrame({
    "ID": [
    [12, 1383],
    [2898, 1871, 223],
    [ 2855, 519, 12],
    [55, 519],
    [1230, 89564, 1247]],
    "number":[1,2,3,4,5]
})
lst = [12, 55]

出去:

df = pd.DataFrame({
    "ID": [
    [2898, 1871, 223],
    [1230, 89564, 1247]],
    "number":[1,2,3,4,5]
})

我想出了這個解決方案:

df = [k for k in df['ID'] if not any(j in lst for j in k)]

它只適用於這些簡化的數據,但不適用於其他情況,因此我正在尋找一些替代方法。 謝謝你。

使用boolean indexingset.isdisjoint

df = df[df['ID'].map(set(lst).isdisjoint)]

#list comprehension alternative
#df = df[[set(lst).isdisjoint(x) for x in df['ID']]]
print (df)
                    ID  number
1    [2898, 1871, 223]       2
4  [1230, 89564, 1247]       5

另一種可能的解決方案:

mask = df['ID'].map(lambda x: any(y in lst for y in x))
df = df.drop(df[mask].index)

Output:

                    ID  number
1    [2898, 1871, 223]       2
4  [1230, 89564, 1247]       5

暫無
暫無

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

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