2016-07-27 97 views
2

这可能是一个非常简单的问题,但我想了解如何在熊猫中进行分组和索引。熊猫索引编组后

比方说,我有以下数据的数据帧:

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] 
}) 

现在,指数将被自动分配,使数据帧的样子:

 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

这只是一个指数名称...

演示: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 

可以摆脱:在索引名

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' 

讲究它使用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 
+0

感谢您使用rename_axis的快捷方式。我知道如何摆脱,但感觉有点尴尬,它是在那里摆在首位。我只是好奇它为什么发生在第一位。 – ymoiseev

+0

因为它是一个索引名称。请使用源代码示例DF尝试以下操作:'df.index.name ='AAA';打印(df)' – MaxU

+0

噢好吧,明白了,所以它不是空行。感谢澄清和道歉的愚蠢问题:) – ymoiseev