2016-05-16 3 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

Это похоже на ошибку. (Я смог воспроизвести для другого набора данных, который имеет multiindex в столбцах. Всякий раз, когда вы используете функции лямбда, вызывающие функции numpy, она дает ту же ошибку.) Может быть, попробуйте подать отчет об ошибке? https://github.com/pydata/pandas/issues – ayhan

+0

Я сделаю это. Просто чувствовал, что я слишком часто их обманываю;) –

ответ

0

groupby функция применяется столбцам к вашему dataframe, однако, когда dataframe транспонируется, строки становятся столбцами и наоборот.

Это не было бы проблемой, если бы не тот факт, что ваши строки и столбцы не являются как мультииндексными. Однако, поскольку вы обрабатываете свой индекс строки как мультииндекс через атрибут level=1, вы получаете эту ошибку.

Кроме того, если вы пытаетесь группе строк, вы должны иметь axis=0

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

утверждение о том, что «обращение с индексом строки в виде мультииндекса с помощью атрибута level = 1 [приводит к ошибке]» неверно. Это функциональность панд. См. Обновление. Я знаю разницу между строками и столбцами (см. Заголовок вопроса). Мой вопрос - вот то, что является источником ошибки. –

Смежные вопросы