Kann ich auf irgendeine Weise den ursprünglichen Index meines großen Datenrahmens beibehalten, nachdem ich einen Gruppenby durchgeführt habe? Der Grund, warum ich das tun muss, ist, dass ich eine innere Zusammenführung zu meinem ursprünglichen df (nach meinem groupby) machen muss, um diese verlorenen Spalten wiederzugewinnen. Der Indexwert ist die einzige "eindeutige" Spalte, in die die Zusammenführung zurückgeführt werden kann. Weiß jemand, wie ich das erreichen kann?
Mein DataFrame ist ziemlich groß. Meine Gruppe sieht so aus:
df.groupby(['col1', 'col2'], ).agg({'col3': 'count'}).reset_index()
Dadurch werden meine ursprünglichen Indizes aus meinem ursprünglichen Datenrahmen entfernt, den ich behalten möchte.
Ich denke, Sie suchen nach einer Transformation in dieser Situation:
df['count'] = df.groupby(['col1', 'col2'])['col3'].transform('count')
Sie sollten 'reset_index ()' nicht verwenden, wenn Sie Ihre ursprünglichen Indizes beibehalten möchten
Sie können Ihren Index über reset_index
zu einer Spalte erhöhen. Dann aggregieren Sie Ihren Index über agg
zusammen mit Ihrer count
-Aggregation zu einem Tuple.
Unten ist ein minimales Beispiel.
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)