2016-09-26 85 views
3

我正在使用一個熊貓DataFrame。我想在滿足特定條件時將列指示符變量賦值爲1。我計算特定組的分位數。如果該值是位數外,我想將列指示器變量分配給1。例如,下列代碼打印每個組的位數:根據觀察分位數分配指標

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

現在對於在我的數據幀其是大於所有觀察分組的價值,我想用設置

df['INDICATOR'] = 1 

我嘗試以下if語句:

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

這給我的錯誤:「ValueError異常:操作數可能ñ不能與形狀(269,)(269,2)一起廣播「。任何幫助,將不勝感激!

回答

2

想要在groupby之後使用transform以獲得等效大小的數組。 gt大於。 mul倍增。我乘以1以得到從gt01的布爾結果。

考慮數據框df

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

我得到的指示是這樣

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

在你的情況,我會做

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

謝謝,那是完美的。 – Justin

+0

哈哈感謝提供好友 –