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

时间:2018-03-11 03:31:18

标签: python pandas dataframe indexing

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

我的DataFrame非常庞大。 我的groupby看起来像这样:

df.groupby(['col1', 'col2'], ).agg({'col3': 'count'}).reset_index()

这会从原始数据框中删除原始索引,我想保留它。

3 个答案:

答案 0 :(得分:1)

我认为你正在寻找这种情况下的转变:

Visual Studio 2017 15.6.0

答案 1 :(得分:0)

如果要保留原始索引,则不应使用'reset_index()'

答案 2 :(得分:0)

您可以通过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)
相关问题