Python 分组后的索引行为:我是否看到一个";额外一行“;?
这可能是一个非常简单的问题,但我试图了解熊猫的分组和索引是如何工作的 假设我有一个包含以下数据的数据帧:Python 分组后的索引行为:我是否看到一个";额外一行“;?,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,这可能是一个非常简单的问题,但我试图了解熊猫的分组和索引是如何工作的 假设我有一个包含以下数据的数据帧: 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
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\u id
对其进行分组时,我得到:
>> df[['p_id', 'rating']].groupby('p_id').count()
rating
p_id
1 3
2 1
3 3
4 2
我注意到p\u id
现在成为分组数据帧的索引,但第一行看起来很奇怪——为什么它有p\u 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\u id
所以我的问题是,当我不使用
as_index=False
时,这一额外的行从何而来?有没有一种方法可以对数据帧进行分组,并将p_id
作为索引,而不必处理这一额外的行?如果有任何文档我可以阅读,我也将不胜感激 它只是一个索引名
演示:
请注意索引名称: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
您可以使用以下方法将其清除:
没有“额外的行”,它只是熊猫如何直观地呈现GroupBy对象,即如何pandas.core.GroupBy.generic.DataFrameGroupBy.\uu str\uuuuuuu
方法呈现分组的dataframe对象:rating
是列,但是现在p\u id
已经从列变成了(行)索引。
它们交错排列的另一个原因是索引可以是多索引(如果您按多列分组)。感谢使用“重命名轴”的快捷方式。我知道如何摆脱它,但一开始它就在那里让人觉得有点尴尬。我只是好奇为什么它会首先发生,因为它是一个索引名。使用源示例DF尝试以下操作:
DF.index.name='AAA';打印(df)
哦,好的,知道了,所以它不是一个空行。谢谢你对一个愚蠢的问题的澄清和道歉:)不是一个愚蠢的问题。您正在尝试理解它,这对您很有好处。很高兴看到您回来没有“额外的行”,它只是熊猫如何直观地呈现GroupBy对象,即如何pandas.core.GroupBy.generic.DataFrameGroupBy.\uu str\uuu
方法呈现分组的dataframe对象:rating
是列,但是p_id
现在已经从一个列变成了(行)索引。它们交错排列的原因也是因为如果按多个列分组,它可以是一个多索引。
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 [42]: df[['p_id', 'rating']].groupby('p_id').count().rename_axis(None)
Out[42]:
rating
1 3
2 1
3 3
4 2