2015-11-27 63 views
0

我有一个的大数据帧的标准分组:大熊猫 - 计算每个组的功能在不同的列

agroup = data.groupby("Product No") 

然后我想一个函数应用于每个组。此函数计算每个组

def compute_thing(df): 
    v1, v2 = calc(df) 
    return v1, v2 

我需要的是具有两列的数据帧,从每一个元组来两个值。

我试着这样做:

agroup.apply(compute_thing) 

但是这将创建一个单个列,并把该值的元组。我试图从compute_thing返回系列或类型的字典,但它从来没有工作过..

任何想法如何处理呢?

+0

尝试添加一些快照'df' – SIslam

回答

1

compute_thing应该返回一个数据帧,而不是一个元组。例如:

import pandas as pd 

df = pd.DataFrame({ 
     'foo': [1, 1, 2, 2, 3, 3], 
     'bar': [1, 2, 3, 4, 5, 6] 
    }) 

def compute_thing(group): 
    return pd.DataFrame({ 
      'foo_mu': group['foo'].mean(), 
      'bar_mu': group['bar'].mean() 
     }, index=[0]) 

df.groupby('foo').apply(compute_thing) 

导致

 bar_mu foo_mu 
foo     
1 0  1.5  1 
2 0  3.5  2 
3 0  5.5  3 
+0

我有一些问题了解你的'group'参数的类型为'compute_thing()'。不应该对分组的结果进行迭代,并且'group'参数是指当前的组? – user1496984

+1

是的,这是发生了什么:'group'是包含包含在当前组内的数据的数据帧。 – jme

+0

顺便说一句,我回来了对此的回应,并意识到有一个与恼人的'一个多指标0'。我想我们可以通过某种'stack' /'unstack'操作来解决这个问题,但是没有更简单的方法来做到这一点吗? – user1496984