Pytanie
Istnieją dwa pytania, które wyglądają podobnie, ale nie są one takie same pytanie: here i here. Obaj nazywają metodę GroupBy
, taką jak count()
lub aggregate()
, która, jak wiem, zwraca wartość DataFrame
. Pytam tylko, jak przekonwertować obiekt GroupBy
(klasa) sam na DataFrame
. Zilustruję poniżej.Python Pandy konwertować obiekt GroupBy do DataFrame
Przykład
Konstrukt przykład DataFrame
następująco.
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)
Powyższy DataFrame
powinien wyglądać następująco (z różnymi liczbami oczywiście).
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
Co chcę zrobić, to grupy przez kolumny „Nazwa” i „wziąć” (w tej kolejności), tak, że mogę dostać DataFrame
indeksowane przez multiindex zbudowanego z kolumn „nazwa” i "wziąć", jak poniżej.
score ping
name take
sasha one 0.923263 72
two 0.724720 14
asa one 0.774320 76
two 0.128721 71
Jak to osiągnąć? Jeśli wykonam grouped = data.groupby(["name", "take"])
, to grouped
jest instancją pandas.core.groupby.DataFrameGroupBy
. Jak przekonwertować grouped
do instancji DataFrame
?
oooooh !!!! Riiiiiight !!!!! OK. Przyjmuję tę odpowiedź w 9 minut, kiedy pozwala mi Stack Overflow. Dziękuję Ci. – Ray
Kiedy próbuję użyć tej odpowiedzi, otrzymuję "AttributeError". "Nie można uzyskać dostępu do atrybutu" set_index "obiektu" DataFrameGroupBy ", spróbuj użyć metody" apply "" – Nate
@Nate - Wygląda na to, że 'data' nie jest' DataFrame', ale wynik groupby - więc potrzebujesz 'g = df.groupby ('col') ', a następnie' g.apply (lambda x: x ['col1'] .set_index()) ' – jezrael