Как удалить строки из столбца, которые имеют совпадающие значения в списке Pandas - PullRequest
0 голосов
/ 25 марта 2020

Я нахожу выбросы из столбца и сохраняю их в списке. Теперь я хочу удалить все значения, которые присутствуют в моем списке из столбца. Как этого добиться?

Это моя функция для поиска выбросов

outlier=[]

def detect_outliers(data):

    threshold=3
    m = np.mean(data)
    st = np.std(data)

    for i in data:
        #calculating z-score value
        z_score=(i-m)/st
        #if the z_score value is greater than threshold value than its a outlier
        if np.abs(z_score)>threshold:
            outlier.append(i)
    return outlier

This is my column in data frame

df_train_11.AMT_INCOME_TOTAL

1 Ответ

0 голосов
/ 25 марта 2020
import numpy as np, pandas as pd

df = pd.DataFrame(np.random.rand(10,5))

outlier_list=[]
def detect_outliers(data):
    threshold=0.5
    for i in data:
    #calculating z-score value
        z_score=(df.loc[:,i]- np.mean(df.loc[:,i])) /np.std(df.loc[:,i])
        outliers = np.abs(z_score)>threshold

        outlier_list.append(df.index[outliers].tolist())
    return outlier_list

outlier_list = detect_outliers(df)

[[1, 2, 4, 5, 6, 7, 9],
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
 [0, 1, 2, 4, 8],
 [0, 1, 3, 4, 6, 8],
 [0, 1, 3, 5, 6, 8, 9]]

Таким образом, вы получаете выбросы каждого столбца. outlier_list[0] дает вам [1, 2, 4, 5, 6, 7, 9], что означает, что строки 1,2, et c являются выбросами для столбца 0.

EDIT

Сокращенный ответ:


df = pd.DataFrame(np.random.randn(10, 3), columns=list('ABC'))
df[((df.B - df.B.mean()) / df.B.std()).abs() < 3]

Это отфильтрует DataFrame, где только ОДИН столбец (например, 'B') находится в пределах трех стандартных отклонений.

...