2016-09-26 9 views
3

私はpandas DataFrameを使用しています。私は、特定の条件が満たされたときに列インジケータ変数を1に割り当てたいと思います。特定のグループの分位数を計算します。値が分位の外にある場合、私は例えば1に列インジケータ変数を割り当てる、次のコードは、グループごとに分位数を出力します。観測量に基づいてインジケータを割り当てる

df[df['LENGTH'] > 1].groupby(['CLIMATE', 'TEMP'])['LENGTH'].quantile(.95)] 

今よりも大きくなっている私のデータフレーム内のすべての観測のために「とValueError:オペランドがnでし

if df.groupby(['CLIMATE','BIN'])['LENGTH'] > df[df['LENGTH'] > 1].groupby(['CLIMATE','BIN'])['LENGTH'].quantile(.95): 
    df['INDICATOR'] = 1 

これは私にエラーを与える:文の場合、私は

df['INDICATOR'] = 1 

を設定したいグループ化された値は、私は次のように使用してみましたotは形(269、)(269,2)とともに放送される。どんな助けもありがとう!

答えて

2

groupbyの後にtransformを使用して、同等のサイズの配列を取得したいとします。 gtがより大きい。 mulは乗算されます。私は1を掛けて、gtから0または1へのブール値の結果を得る。

私はあなたの場合には、この

df.A.gt(df.groupby('labels').A.transform(pd.Series.quantile, q=.95)).mul(1) 

のような指標を取得したいdf

df = pd.DataFrame(dict(labels=np.random.choice(list('abcde'), 100), 
         A=np.random.randn(100))) 

データフレームを考えてみましょう、私は、

df['INDICATOR'] = df['LENGTH'].gt(df.groupby(['CLIMATE','BIN'])['LENGTH'] \ 
            .transform(pd.Series.quantile, q=.95)).mul(1) 
+0

はありがとう行いたいですそれは完璧だった。 – Justin

+0

仲間に感謝しています。 –

関連する問題