_norm.cdf
_in placeon _numpy.array
_のようなscipy関数を使用する方法はありますか? (または_pandas.DataFrame
_)、_numpy.apply
_のバリアントを使用、 _numpy.apply_along_axs
_ など?
背景は、ノルム分布のCDF値に変換したいzスコア値のテーブルがあります。私は現在、これにscipy
から _norm.cdf
_ を使用しています。
現在、数値以外の値を持つデータフレームを操作しています。
_ Name Val1 Val2 Val3 Val4
0 A -1.540369 -0.077779 0.979606 -0.667112
1 B -0.787154 0.048412 0.775444 -0.510904
2 C -0.477234 0.414388 1.250544 -0.411658
3 D -1.430851 0.258759 1.247752 -0.883293
4 E -0.360181 0.485465 1.123589 -0.379157
_
(Name
変数をインデックスにすることは解決策ですが、私の実際のデータセットでは、名前はアルファベット文字ではありません。)
数値データのみを変更するには、 df._get_numeric_data()
データフレームの数値データを含むデータフレームを返すプライベート関数を使用しています。ただし、set
関数はありません。したがって、私が呼び出す場合
_norm.cdf(df._get_numeric_data)
_
これにより、df
の元のデータが変更されることはありません。
数値データフレームinplaceに_norm.cdf
_を適用してこれを回避しようとしているので、これにより元のデータセットが変更されます。
私は私が好むと思います select_dtypes
以上_get_numeric_data
:
In [11]: df.select_dtypes(include=[np.number])
Out[11]:
Val1 Val2 Val3 Val4
0 -1.540369 -0.077779 0.979606 -0.667112
1 -0.787154 0.048412 0.775444 -0.510904
2 -0.477234 0.414388 1.250544 -0.411658
3 -1.430851 0.258759 1.247752 -0.883293
4 -0.360181 0.485465 1.123589 -0.379157
Applyはインプレースを提供しませんが、次のようなことを行うことができます(とにかく、より明確であると私は主張します)。
num_df = df.select_dtypes(include=[np.number])
df[num_df.columns] = norm.cdf(num_df.values)