it-swarm.com.de

Wie behalte ich den ursprünglichen Index eines DataFrames nach 2 Spalten?

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.

4
Hana

Ich denke, Sie suchen nach einer Transformation in dieser Situation:

df['count'] = df.groupby(['col1', 'col2'])['col3'].transform('count')
1
Scott Boston

Sie sollten 'reset_index ()' nicht verwenden, wenn Sie Ihre ursprünglichen Indizes beibehalten möchten

0
manoj

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)
0
jpp