分组后的熊猫索引

时间:2016-07-27 06:07:40

标签: python pandas dataframe

这可能是一个非常简单的问题,但我试图了解分组和索引在pandas中的工作原理。

我们说,我有一个包含以下数据的DataFrame:

df = pd.DataFrame(data={
    'p_id': [1, 1, 1, 2, 3, 3, 3, 4, 4],
    'rating': [5, 3, 2, 2, 5, 1, 3, 4, 5]
})

现在,将自动分配索引,因此DataFrame看起来像:

      p_id    rating
0     1       5
1     1       3
2     1       2
3     2       2
4     3       5
5     3       1
6     3       3
7     4       4
8     4       5

当我尝试按p_id对其进行分组时,我得到:

>> df[['p_id', 'rating']].groupby('p_id').count()
           rating
p_id        
1          3
2          1
3          3
4          2

我注意到p_id现在变成了这个DataFrame的索引,但第一行看起来很奇怪 - 为什么它有' p_id'带有空评级的索引?

我知道如何修复它,如果我这样做的话:

>> df[['p_id', 'rating']].groupby('p_id', as_index=False).count()
      p_id    rating
0     1       3
1     2       1
2     3       3
3     4       2

现在我没有这个奇怪的第一列,但我有索引和p_id。

所以我的问题是,当我不使用as_index = False时,这个额外的行会从哪里来?有没有办法将DataFrame分组并保持p_id作为索引,而不必处理这个额外的行?如果有任何我可以阅读的文档,那也将非常感激。

由于

2 个答案:

答案 0 :(得分:2)

它只是一个索引名称......

演示:

In [46]: df
Out[46]:
   p_id  rating
0     1       5
1     1       3
2     1       2
3     2       2
4     3       5
5     3       1
6     3       3
7     4       4
8     4       5

In [47]: df.index.name = 'AAA'

注意索引名称:AAA

In [48]: df
Out[48]:
     p_id  rating
AAA
0       1       5
1       1       3
2       1       2
3       2       2
4       3       5
5       3       1
6       3       3
7       4       4
8       4       5

你可以使用rename_axis()方法摆脱它:

In [42]: df[['p_id', 'rating']].groupby('p_id').count().rename_axis(None)
Out[42]:
   rating
1       3
2       1
3       3
4       2

答案 1 :(得分:0)

没有“多余的行” ,这只是熊猫如何直观地呈现GroupBy对象,即pandas.core.groupby.generic.DataFrameGroupBy.__str__方法如何呈现分组的数据框对象:rating是列,但是现在p_id已经从列变成了(行)索引。

它们错开它们的另一个原因是因为索引可以是MultiIndex(如果您按多列分组)。