2016-09-17 12 views
3

私はpython 3.5を使用しており、numpyとpandasのライブラリをインポートしています。私はdfという名前のDataFrameを作成しました。インデックスはゼロから始まり、2つの列から始まります。変更の割合(PofChg)、Up、Down、またはFlat(U_D_F)。どのようにnp.whereにより多くの引数を受け入れるようにすると、>、<、および=をフィルタリングします。 >と<?

U_D_F列については、PofChg列に基づいて 'Up'、 'Down'、 'Flat'という単語を入力したいと考えています。 Upはゼロより大きく、Downはゼロより小さく、Flatはゼロに等しいことを意味します。

np.where関数は、2つの事柄を除いてうまく働くようで、PofChg欄の数が「ゼロ」であるとき (1)なぜそれがU_D_F列に「ダウン」を表示さ (2)どのようにします私はnp.where関数をより多くの引数を受け入れるようにします。つまり、df.PofChgが0より大きい場合は真、 "↑"ならfalseを表示します。 > 0、真ディスプレイ「アップ」の場合はfalseディスプレイ「ダウン」であれば、それはゼロに等しいならば、「フラット」表示

私は

PofChg U_D_F 
0  -1 Down 
1  0 Down 
2  1 Up 
3  -2 Down 
4  0 Down 
5  5 Up 
6  3 Up 
7  -6 Down 
Press any key to continue . . . 
dfを印刷するとき、これは、現在の出力であります

これは私がこのケースでnp.sign()と一緒にmap()を使用することになり、私のコード

import pandas as pd 
import numpy as np 


df = pd.DataFrame({'PofChg':[-1,0,1,-2,0,5,3,-6]}) 
df['U_D_F'] = np.where(df.PofChg > 0 , 'Up','Down');df 

print(df) 

答えて

5

なぜそれが0であればPofChg欄の数は、np.whereにあなたの条件は> 0であったためである

「ゼロ」であるので、ときU_D_F欄の「ダウン」と表示されます条件が満たされず、代替案が選択されます。

私はそれを変更したい - 真ディスプレイ「アップ」場合はfalseを表示「ダウン」場合、df.PofChgは> 0であれば、それはゼロに等しいならば、

「フラット」表示
np.where(df.PofChg > 0 , 'Up', np.where(df.PofChg == 0, 'Flat', 'Down')) 

df.PofChg > 0の場合は、'Up'を選択します。そうでない場合は、df.PofChg == 0の場合は'Flat'を選択し、そうでない場合は'Down'を選択します。

+0

私はそれがゼロであるときに表示されている理由をキャッチしなかったと信じていない、あなたの答えは非常にうまく動作します、 – ZacAttack

5

です:

In [133]: mp = {-1:'Down', 0:'Flat', 1:'Up'} 

In [134]: df['U_D_F'] = np.sign(df.PofChg).map(mp) 

In [135]: df 
Out[135]: 
    PofChg U_D_F 
0  -1 Down 
1  0 Flat 
2  1 Up 
3  -2 Down 
4  0 Flat 
5  5 Up 
6  3 Up 
7  -6 Down 

はnp.sign():

In [136]: np.sign(df.PofChg) 
Out[136]: 
0 -1 
1 0 
2 1 
3 -1 
4 0 
5 1 
6 1 
7 -1 
Name: PofChg, dtype: int64 

np.sign(df.PofChg)の種類:

In [9]: type(np.sign(df.PofChg)) 
Out[9]: pandas.core.series.Series 
+0

「ndarray.map」はいつからですか?私のために1.11.1に存在しません – Eric

+1

@Eric 'np.sign(df)'はデータフレームを返します(シリーズと同じ - 私には奇妙なもの) – ayhan

+0

np.whereとnp .signとmap?それはパフォーマンスか好みですか? – ZacAttack

関連する問題

 関連する問題