Есть два вопроса, которые похожи, но они не тот же вопрос: here и here. Они оба называют метод GroupBy
, например count()
или aggregate()
, который, как мне известно, возвращает DataFrame
. Я спрашиваю, как преобразовать объект GroupBy
(класс pandas.core.groupby.DataFrameGroupBy
) в DataFrame
. Я проиллюстрирую ниже.Python Панды преобразовать объект GroupBy в DataFrame
Пример
Построить пример DataFrame
следующим образом.
data_list = []
for name in ["sasha", "asa"]:
for take in ["one", "two"]:
row = {"name": name, "take": take, "score": numpy.random.rand(), "ping": numpy.random.randint(10, 100)}
data_list.append(row)
data = pandas.DataFrame(data_list)
Приведенный выше DataFrame
должен выглядеть следующим образом (с разными номерами, очевидно).
name ping score take
0 sasha 72 0.923263 one
1 sasha 14 0.724720 two
2 asa 76 0.774320 one
3 asa 71 0.128721 two
То, что я хочу сделать, это группы по столбцам «имя» и «взять» (в таком порядке), так что я могу получить DataFrame
индексированный по мультииндексу, построенный из «имени» столбцов и «взять», как показано ниже.
score ping
name take
sasha one 0.923263 72
two 0.724720 14
asa one 0.774320 76
two 0.128721 71
Как это достичь? Если я делаю grouped = data.groupby(["name", "take"])
, то grouped
является экземпляром pandas.core.groupby.DataFrameGroupBy
. Как преобразовать grouped
в экземпляр DataFrame
?
Oooooh !!!! Riiiiiight !!!!! OK Я приму этот ответ за 9 минут, когда Stack Overflow позволяет мне. Спасибо. – Ray
Когда я пытаюсь использовать этот ответ, я получаю атрибут AttributeError. «Невозможно получить доступ к вызываемому атрибуту« set_index »объектов« DataFrameGroupBy », попробуйте использовать метод« apply ». – Nate
@Nate - Кажется, что' data' не 'DataFrame', а вывод groupby - так нужно' g = df.groupby ('col') ', а затем' g.apply (lambda x: x ['col1']. set_index()) ' – jezrael