python pandas如何从数据帧中删除异常值并替换为先前记录的平均值

时间:2014-01-02 16:26:15

标签: python pandas outliers

我有一个数据帧16k记录和多组国家和其他字段。我已经生成了一个数据的初始输出,看起来像下面的剪辑。现在我需要做一些数据清理,操作,删除偏斜或异常值,并用基于某些规则的值替换它。

即。在下面我如何识别偏斜点(任何大于1的值)并用下一个记录的平均值或之前的记录替换它们(如果没有以后的记录)。(在该组中)

因此,在下面的数据框中,我想将IT第1周的比例%4替换为1.21的第2周和第3周的平均值,因此它为0.81。

这方面的任何技巧?

Country Week    Bill%1  Bill%2  Bill%3  Bill%4  Bill%5  Bill%6
IT     week1    0.94    0.88    0.85    1.21    0.77    0.75
IT     week2    0.93    0.88    1.25    0.80    0.77    0.72
IT     week3    0.94    1.33    0.85    0.82    0.76    0.76
IT     week4    1.39    0.89    0.86    0.80    0.80    0.76
FR     week1    0.92    0.86    0.82    1.18    0.75    0.73
FR     week2    0.91    0.86    1.22    0.78    0.75    0.71
FR     week3    0.92    1.29    0.83    0.80    0.75    0.75
FR     week4    1.35    0.87    0.84    0.78    0.78    0.74

1 个答案:

答案 0 :(得分:3)

我不知道有任何内置插件可以执行此操作,但您应该能够自定义此内容以满足您的需求,不是吗?

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(10,5),columns=list('ABCDE'))
df.index = list('abcdeflght')

# Define cutoff value
cutoff = 0.90

for col in df.columns: 
    # Identify index locations above cutoff
    outliers = df[col][ df[col]>cutoff ]

    # Browse through outliers and average according to index location
    for idx in outliers.index:
        # Get index location 
        loc = df.index.get_loc(idx)

        # If not one of last two values in dataframe
        if loc<df.shape[0]-2:
            df[col][loc] = np.mean( df[col][loc+1:loc+3] )
        else: 
            df[col][loc] = np.mean( df[col][loc-3:loc-1] )