2017-03-22 88 views
0

我在git hub上找到了這個函數。如何將函數應用於熊貓數據幀組

def std_div(data, threshold=3): 
    std = data.std() 
    mean = data.mean() 
    isOutlier = [] 
    for val in data: 
     if val/std > threshold: 
      isOutlier.append(True) 
     else: 
      isOutlier.append(False) 
    return isOutlier 

我想這適用於我的數據幀的每個組(部門)

 employee_id dept   Salary 
     1    sales   10000 
     2    sales   110000 
     3    sales   120000 
     4    hr    5000 
     5    hr    6000 

這工作,但它計算整個數據幀的STD股利。

df["std_div"]= df.from_dict(std_div(df.Salary)) 
+0

你的函數計算多個項目。你只想要std?試試'df.groupby(['dept'])['Salary']。agg('std')' – Parfait

回答

1

你可以做大致如下,在那裏你將感興趣的欄目組,然後用一個for循環運行塔上的函數,該函數特定組

for name, group in df.groupby('dept'): 
    df.loc[group.index, 'outlier'] = std_div(group.Salary) 

df 
employee_id dept Salary outlier 
1   sales 10000 False 
2   sales 110000 False 
3   sales 120000 False 
4   hr  5000 True 
5   hr  6000 True 

根據東西線在你想要的輸出結果上,你可以將返回值分配給原始數據幀。