4

マルチインデックス データフレームを正規化するにはどうすればよいですか?

私がデータフレームを持っているとしましょう:

d = pd.DataFrame([["a",1,3],["a",2,2],["b",4,4],["b",5,8]], 
                  columns=["name","value1","value2"])

各「名前」の正規化された値を計算するにはどうすればよいですか?

基本的なデータフレームを正規化する方法を知っています:

d = (d-d.mean(axis=0))/data.std(axis=0, ddof=1)

しかし、データフレームの各「名前」グループにこれを適用することはできません

SO私が望む結果は次のとおりです。

name, value1, value2
a     -0.5     0.5
a      0.5    -0.5
b     -0.5    -1
b      0.5     1

groupby と multiindex データ フレームを試しましたが、おそらく正しい方法で実行していません。

4

2 に答える 2

0

あなたが与えた結果は正しいものですか?value1 と value2 を別々に正規化することを想定しています。それが正しくない場合は、お知らせください。

#  Easier with `name` as the index.

In [65]: d = d.set_index('name')

In [66]: d
Out[66]: 
      value1  value2
name                
a          1       3
a          2       2
b          4       4
b          5       8

In [68]: means = g.mean()

In [69]: stds = g.std()

In [70]: means
Out[70]: 
      value1  value2
name                
a        1.5     2.5
b        4.5     6.0

In [71]: stds
Out[71]: 
        value1    value2
name                    
a     0.707107  0.707107
b     0.707107  2.828427

In [76]: g.transform(lambda x: (x - means) / stds)
Out[76]: 
        value1    value2
name                    
a    -0.707107  0.707107
a     0.707107 -0.707107
a          NaN       NaN
b          NaN       NaN
b    -0.707107 -0.707107
b     0.707107  0.707107

# Get rid of the nans

In [77]: g.transform(lambda x: (x - means) / stds).dropna()
Out[77]: 
        value1    value2
name                    
a    -0.707107  0.707107
a     0.707107 -0.707107
b    -0.707107 -0.707107
b     0.707107  0.707107
于 2013-07-16T13:26:04.937 に答える