Groupbyを実行した後、大きなデータフレームの元のインデックスを保持する方法はありますか?これが必要な理由は、失われた列を取り戻すために、元のdf(groupbyの後)に内部マージを戻す必要があるためです。そして、インデックス値は、マージを元に戻す唯一の「一意の」列です。誰も私がこれを達成する方法を知っていますか?
私のDataFrameは非常に大きいです。私のグループは次のようになります。
df.groupby(['col1', 'col2'], ).agg({'col3': 'count'}).reset_index()
これにより、保持したい元のデータフレームから元のインデックスが削除されます。
あなたはこの状況で変革を求めていると思います:
df['count'] = df.groupby(['col1', 'col2'])['col3'].transform('count')
reset_index
を使用して、インデックスを列に昇格できます。次に、agg
集約とともに、count
を介してインデックスをTupleに集約します。
以下は最小限の例です。
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)
元のインデックスを保持する場合は、「reset_index()」を使用しないでください