簡體   English   中英

將 function 應用於數據框中的幾列

[英]Apply a function to several columns in a data frame

我有以下 function:

def remove_outlier(dfIn, colName):
    q1 = dfIn[colName].quantile(0.10)
    q3 = dfIn[colName].quantile(0.90)
    iqr = q3-q1 
    fenceLow = q1 - 1.5 * iqr
    fenceHigh = q3 + 1.5 * iqr
    dfOut = dfIn.loc[(dfIn[colName] > fenceLow) & (dfIn[colName] < fenceHigh)]
    return dfOut

我想將 function 獨立(一一)應用於數據幀中的多個列,而無需多次調用 function。

最有效的方法是什么? 還是可以更改 function 以傳遞列名列表?

這可以在 2 次申請中完成。 在此解決方案中,將分別檢測每列的異常值,並單獨刪除包含任何列的異常值的行。

假設這個數據集。 我修改了您的 function 並將 q1 和 q3 值固定為應有的值。

    A   B     C   D
0   1   100   2   3
1   1   200   4   5
2   1   12000 4   7
3   2   100   22  2
4   2   200   3   1
#Modified function
def get_outliers(l):
    #if you keep 0.1 and 0.75 then pretty much no outliers will be filtered
    #q1 is 0.25 quantile and q3 is 0.75 quantile
    q1 = l.quantile(0.25)  
    q3 = l.quantile(0.75)
    iqr = q3-q1
    fenceLow = q1 - 1.5 * iqr
    fenceHigh = q3 + 1.5 * iqr
    return [~(i>=fenceLow and i<=fenceHigh) for i in l]

第一步是獲取應用 function 以獲取列限制並獲取每列的 boolean 值列表。

outliers = df.apply(get_outliers)
        A       B       C       D
0   False   False   False   False
1   False   False   False   False
2   False   True    False   False
3   False   False   True    False
4   False   False   False   False

第二步是找到其中任何一個值為 True 的行並將它們刪除。

df[~outliers.apply(lambda x:any(x), axis=1)]
    A   B   C   D
0   1   100 2   3
1   1   200 4   5
4   2   200 3   1

暫無
暫無

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

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