2017-11-12 17 views
2

で標準化:全体の列ベクトルを標準化し、私は、各キーのデータフレームを標準化したいとませグループ化して、私は次のデータフレーム持ってスパーク

enter image description here

import pandas as pd 
import numpy as np 
df = pd.DataFrame([[1,2,3],[1,2,1],[1,2,2],[2,2,2],[2,3,2],[2,4,2]],columns=["a","b","c"]) 
df = df.set_index("a") 
df.groupby("a").mean() 
df.groupby("a").std() 

を。

だから、次の例のための出力は次のようになります。

a = 1: 
    Column: b 
    (2 - 2)/0.0 
    (2 - 2)/0.0 
    (2 - 2)/0.0 
    Column: c 
    (3 - 2)/1.0 
    (1 - 2)/1.0 
    (2 - 2)/1.0 

そして私は、それぞれの値は、私が火花でそれを行うことができますどのようにグループ

あたりの標準化になるだろうか?

おかげSparkDataFrame

+2

だけでスクリーンショットは、それを試してみるためにコピー&ペーストするコードされているならば - 文句を言わないtheimage –

+1

編集からそれを入力する - 私は、コードを追加しましたが、実際にそれが問題を理解するだけで簡単です、重要ではありません。 .. – Lee

+1

今すぐ誰かがあなたに解決策を得るためにpyfiddle.ioまたはsmthに素早くペースト&コピーするコードを使用できます。+1あなたがSOコミュニティがあなたを助けるのを助けました。 –

答えて

1

sdf = spark.createDataFrame(df) 

輸入:

from pyspark.sql.functions import * 
from pyspark.sql.window import Window 

def z_score(c, w): 
    return (col(c) - mean(c).over(w))/stddev(c).over(w) 

ウィンドウ:

w = Window.partitionBy("a") 

ソリューション:

sdf.select("a", z_score("b", w).alias("a"), z_score("c", w).alias("b")).show() 
+---+----+----+                 
| a| a| b| 
+---+----+----+ 
| 1|null| 1.0| 
| 1|null|-1.0| 
| 1|null| 0.0| 
| 2|-1.0|null| 
| 2| 0.0|null| 
| 2| 1.0|null| 
+---+----+----+ 
関連する問題