簡體   English   中英

如何有效地從 pandas dataframe 系列中刪除元素

[英]How to efficiently remove elements from series of pandas dataframe

我有一個 pandas dataframe 結構如下:

   Col1   |           Col2      |     Col3
   -------+---------------------+--------------
0   6     |    [a,b,c,d,e,f]    |     ....
1   4     |    [a,g,h,i]        |     ....
2   5     |    [a,b,j,k,l]      |     ....

我有一個必須從 Col2 [a,b,h]中的所有列表中刪除的元素列表

最后我需要把它翻譯成

   Col1   |           Col2  |     Col3
   -------+-----------------+--------------
0   4     |    [c,d,e,f]    |     ....
1   2     |    [g,i]        |     ....
2   3     |    [j,k,l]      |     ....

其中Col1Col2中的元素數

我試過了

def modify_data(dataset):
    ds = dataset.copy()      
    Col2 = dataset['Col2']
    remove_list = [a,b,h]
    removed_col2 = []
    counts = []
    for i,row in enumerate(Col2):
        cleaned = np.array(list(set(row)-set(remove_list)))
        removed_col2.append(cleaned)
        counts.append(len(cleaned))


    ds.loc[:,'Col1'] = counts
    ds.loc[:,'Col2'] = removed_col2
    return ds

但是性能太差了。 例如,對於具有 200,000 行的數據集。

CPU times: user 11min 26s, sys: 24.2 s, total: 11min 50s
Wall time: 11min 48s

我會嘗試

df.Col2 = (df.Col2.map(set)-set(['a','b','h'])).map(list)
df.Col1 = df.Col2.str.len()
df
Out[111]: 
           Col2  Col1
0  [f, e, c, d]     4
1        [g, i]     2
2     [j, k, l]     3

另一種解決方案,使用list comprehension

df = pd.DataFrame(
    {
        "col1": [6, 4, 3],
        "col2": [
            ["a", "b", "c", "d", "e", "f"],
            ["a", "g", "h", "i"],
            ["a", "b", "j", "k", "l"],
        ],
    }
)

df['col2'] = [[value for value in entry
               if value not in ('a','b','h')] 
              for entry in df.col2
             ]
df['col1'] = df.col2.str.len()


   col1     col2
0   4   [c, d, e, f]
1   2   [g, i]
2   3   [j, k, l]

暫無
暫無

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

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