如何在groupby 2列之后保留DataFrame的原始索引?

Han*_*ana 9 python indexing dataframe pandas

执行groupby后,有什么方法可以保留大数据帧的原始索引?我需要这样做的原因是因为我需要对我的原始df进行内部合并(在groupby之后)以重新获得那些丢失的列。索引值是执行合并回的唯一“唯一”列。有谁知道我怎么能做到这一点?

我的DataFrame很大。我的groupby看起来像这样:

df.groupby(['col1', 'col2'], ).agg({'col3': 'count'}).reset_index()
Run Code Online (Sandbox Code Playgroud)

这会将我的原始索引从我要保留的原始数据框中删除。

jpp*_*jpp 14

您可以通过 将索引提升到列reset_index。然后通过 将您的索引agg与您的count聚合一起聚合为一个元组。

下面是一个最小的例子。

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)
Run Code Online (Sandbox Code Playgroud)

  • 据我了解OP的问题..这是正确的答案。 (3认同)

Sco*_*ton 8

我认为您正在寻找这种情况下的转换:

df['count'] = df.groupby(['col1', 'col2'])['col3'].transform('count')
Run Code Online (Sandbox Code Playgroud)

  • 根据评论,他想知道哪些指数对每个组有贡献 (2认同)