/ / Pandas indexovanie po zoskupení - python, panda, dataframe

Pandas indexovanie po zoskupení - python, panda, dataframe

čo môže byť veľmi jednoduchá otázka, ale snažím sa pochopiť, ako zoskupovanie a indexovanie funguje v pandách.

Povedzme, že mám DataFrame s nasledujúcimi údajmi:

df = pd.DataFrame(data={
"p_id": [1, 1, 1, 2, 3, 3, 3, 4, 4],
"rating": [5, 3, 2, 2, 5, 1, 3, 4, 5]
})

Teraz by sa index priradil automaticky, takže DataFrame vyzerá takto:

      p_id    rating
0     1       5
1     1       3
2     1       2
3     2       2
4     3       5
5     3       1
6     3       3
7     4       4
8     4       5

Keď sa pokúsim zoskupiť ho p_id, dostanem:

>> df[["p_id", "rating"]].groupby("p_id").count()
rating
p_id
1          3
2          1
3          3
4          2

Všimol som si, že p_id sa teraz stáva indexom pre tento DataFrame, ale prvý riadok mi vyzerá divne - prečo má v ňom index "p_id" s prázdnym ratingom?

Viem, ako to napraviť, ak to urobím:

>> df[["p_id", "rating"]].groupby("p_id", as_index=False).count()
p_id    rating
0     1       3
1     2       1
2     3       3
3     4       2

Teraz nemám tento zvláštny prvý stĺpec, ale mám index aj p_id.

Takže moja otázka je, kde to robí tento extra riadokpochádzajúce z toho, keď nepoužívam as_index = False a existuje spôsob, ako zoskupiť DataFrame a udržať p_id ako index, pričom sa nemusím zaoberať týmto extra riadkom? Ak existujú nejaké dokumenty, ktoré by som si mohol prečítať, bolo by to tiež veľmi ocenil.

Vďaka

odpovede:

2 pre odpoveď č. 1

Je to len indexové meno ...

demo:

In [46]: df
Out[46]:
p_id  rating
0     1       5
1     1       3
2     1       2
3     2       2
4     3       5
5     3       1
6     3       3
7     4       4
8     4       5

In [47]: df.index.name = "AAA"

dávajte pozor na názov indexu: AAA

In [48]: df
Out[48]:
p_id  rating
AAA
0       1       5
1       1       3
2       1       2
3       2       2
4       3       5
5       3       1
6       3       3
7       4       4
8       4       5

Môžete sa ho zbaviť rename_axis () metóda:

In [42]: df[["p_id", "rating"]].groupby("p_id").count().rename_axis(None)
Out[42]:
rating
1       3
2       1
3       3
4       2