Existe-t-il un moyen de conserver l'index d'origine de ma grande trame de données après avoir effectué un regroupement? La raison pour laquelle j'ai besoin de cela est parce que je dois faire une fusion interne vers mon df original (après mon groupby) pour retrouver ces colonnes perdues. Et la valeur d'index est la seule colonne «unique» dans laquelle effectuer la fusion. Est-ce que quelqu'un sait comment je peux y arriver?
Mon DataFrame est assez grand. Mon groupe ressemble à ceci:
df.groupby(['col1', 'col2'], ).agg({'col3': 'count'}).reset_index()
Cela supprime mes index d'origine de mon image de données d'origine, que je souhaite conserver.
Je pense que vous cherchez à transformer dans cette situation:
df['count'] = df.groupby(['col1', 'col2'])['col3'].transform('count')
Vous ne devez pas utiliser 'reset_index ()' si vous souhaitez conserver vos index d'origine
Vous pouvez élever votre index à une colonne via reset_index
. Puis agrégez votre index à un tuple via agg
, avec votre agrégation count
.
Vous trouverez ci-dessous un exemple minimal.
import pandas as pd, numpy as np
df = pd.DataFrame(np.random.randint(0, 4, (50, 5)),
index=np.random.randint(0, 4, 50))
df = df.reset_index()
res = df.groupby([0, 1]).agg({2: 'count', 'index': lambda x: Tuple(x)}).reset_index()
# 0 1 2 index
# 0 0 0 4 (2, 0, 0, 2)
# 1 0 1 4 (0, 3, 1, 1)
# 2 0 2 1 (1,)
# 3 0 3 1 (3,)
# 4 1 0 4 (1, 2, 1, 3)
# 5 1 1 2 (1, 3)
# 6 1 2 4 (2, 1, 2, 2)
# 7 1 3 1 (2,)
# 8 2 0 5 (0, 3, 0, 2, 2)
# 9 2 1 2 (0, 2)
# 10 2 2 5 (1, 1, 3, 3, 2)
# 11 2 3 2 (0, 1)
# 12 3 0 4 (0, 3, 3, 3)
# 13 3 1 4 (1, 3, 0, 1)
# 14 3 2 3 (3, 2, 1)
# 15 3 3 4 (3, 3, 2, 1)