2014-10-11 35 views
1

我使用一個版本這個配方中「的Python數據分析」 p.269如何將自定義公式應用於grouped.apply()。unstack()方法中的組元素?

frame = DataFrame({'data1': np.random.randn(1000), 
        'data2': np.random.randn(1000)}) 
factor = pd.cut(frame.data1, 4) 
def get_stats(group): 
    return {'min': group.min(), 'max': group.max(), 
      'count': group.count(), 'mean': group.mean()} 
grouped = frame.data2.groupby(factor) 
grouped.apply(get_stats).unstack() 

Out[101]: 
       count  max  mean  min 
data1 
(-1.23, 0.489] 598 3.260383 -0.002051 -2.989741 
(-2.956, -1.23] 95 1.670835 -0.039521 -3.399312 
(0.489, 2.208] 297 2.954439 0.081822 -3.745356 
(2.208, 3.928]  10 1.765640 0.024750 -1.929776 

在其中式get_stats(組)被定義我希望包括計數數的函數的部分的正面觀察結果並將它們除以觀察總數。所以,我想

def get_stats(group): 
    return {'mean': group.mean(), 'std': group.std(), 
      'hit_r': group.applymap(lambda x: x >= 0).sum()/group.count()} 

不過我:

AttributeError: 'Series' object has no attribute 'applymap' 

我怎麼能找到一種方法,結合了一組計算?

感謝

回答

0

看來,當你組數據幀返回一串一系列因你原來只有有兩列等。 applymap是一個應用元素明智的方法的Dataframe方法。看起來你正在尋找申請在這種情況下。請嘗試以下...

def get_stats(group): 
    return {'mean': group.mean(), 'std': group.std(), 
      'hit_r': group.apply(lambda x: x >= 0).sum()/float(group.count())} 

我也鑄造group.count()作爲一個float這樣的解釋會意識到它需要做的浮動分工,而不是整數除法

相關問題