Python 如何在grouped.apply().unstack()方法中的group元素上应用自定义公式?

Python 如何在grouped.apply().unstack()方法中的group元素上应用自定义公式?,python,pandas,grouping,Python,Pandas,Grouping,我在“Python for Data analysis”第269页中使用了这个配方的一个版本 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.ma

我在“Python for Data analysis”第269页中使用了这个配方的一个版本

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_statsgroup的定义部分,我想包括一个函数,它计算积极观察的数量,并将它们除以观察的总数。所以我试过了

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'
我怎样才能找到一种方法,将这种计算纳入一个组


谢谢

看起来,当您对数据帧进行分组时,它会返回一组序列,因为您原来的数据帧只有两列。applymap是一种数据帧方法,它按元素应用方法。看起来您正在寻找此实例中的应用程序。试试下面的

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转换为浮点,这样解释器就会意识到它需要进行浮点除法,而不是整数除法