2017-03-22 5 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 
私は、各グループのために私のデータフレームにこれを適用する

(DEPT)

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

これは動作しますが、それは全体のデータフレームのためのSTDのdivを計算します。

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

この関数は複数のアイテムを計算します。あなたはstdだけを望んでいますか? 'df.groupby(['dept'])['Salary']を試してみてください。agg( 'std')' – Parfait

答えて

1

あなたが興味の列でグループそしてによっては、その特定のグループ

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 

の列に関数を実行するためにforループを使用し、次の線に沿って何かを行うことができますその出力を希望するものに元のデータフレームに戻り値を割り当てることができます

関連する問題