2016-05-16 273 views
2

我想下面的例子中,在那里我需要列:大熊猫GROUPBY在列

import pandas as pd 
import numpy as np 

y = pd.DataFrame(np.random.randint(0,10, (20,30)).astype(float), 
       columns = pd.MultiIndex.from_tuples(
        list(zip(np.arange(30), 
          np.random.randint(0,10, (30,)))) 
       )) 
y.T.groupby(level = 1).agg(lambda x: np.std(x)/np.mean(x)) 

和它的作品。但是,以下返回一个错误:

y.groupby(level = 1, axis = 1).agg(lambda x: np.std(x)/np.mean(x)) 

我错过了什么吗?


UPD:继时,分别采取工程:

y.groupby(level = 1, axis = 1).agg(np.std)/\ 
    y.groupby(level = 1, axis = 1).agg(np.mean) 
+1

这似乎是一个错误。 (我能够重现一个不同的数据集,这个数据集在列上有多个索引,每当你使用调用numpy函数的lambda函数,它会给出相同的错误。)也许尝试提交一个错误报告? https://github.com/pydata/pandas/issues – ayhan

+0

我会去做的。只是觉得我太频繁地窃听它们;) –

回答

0

groupby函数应用于逐列到你的数据帧,然而,当数据帧被调换,行成列,反之亦然。

这不会是一个问题,如果它不是因为你的行和列都不是多索引。但是,由于您通过level=1属性将您的行索引视为多索引,因此会出现该错误。

此外,如果你被行试图组,你应该有axis=0

y.groupby(y.index, axis = 0).agg(lambda x: np.std(x)/np.mean(x)) 
+0

“通过level = 1属性将[行...]索引视为多索引,[导致]错误”的说法并不正确。它是熊猫的功能。请参阅更新。我知道行和列之间的区别(请参阅问题的标题)。我的问题是错误的来源是什么。 –