groupby是否会自动分组pandas中的所有非数字列?

时间:2017-03-29 22:02:48

标签: python pandas

我在下面有一个数据集示例(仅显示前几行,但有193行):

country,beer_servings,spirit_servings,wine_servings,total_litres_of_pure_alcohol,continent
Afghanistan,0,0,0,0.0,Asia
Albania,89,132,54,4.9,Europe
Algeria,25,0,14,0.7,Africa
Andorra,245,138,312,12.4,Europe
Angola,217,57,45,5.9,Africa
Antigua & Barbuda,102,128,45,4.9,North America
...

当我运行时:drinks.groupby('continent').head()

我找回了30行的数据帧。但在这30行中,我仍然有continent的重复名称。例如,在下图中,您可以看到Europe重复两次(第1行和第3行):

enter image description here

当我按照大陆分组时,我无法理解为什么我仍然在同一个大陆上有两行?

在这种情况下groupby操作也按country进行分组,即使我从未在groupby函数中指定它?因为我在SQL中知道你应该使用像maxminsum等聚合函数。但是在这种情况下我不需要传入一个聚合函数我得到了上面的结果。

2 个答案:

答案 0 :(得分:3)

没有!

正在发生的事情是headgroupby对象上的一种方法,其行为与pd.DataFrame.head略有不同。

groupby version of head所做的是返回每个组的头部。

因此,我们可以通过将1传递给head方法并看到它返回每个子集的第一行来更清楚地看到这一点

df.groupby('continent').head(1)

enter image description here

答案 1 :(得分:2)

drinks.groupby('continent').head([n=5])会返回每个组中的第一个n行,但会按原始索引重新排序。尝试拨打drinks.groupby('continent').head(1),您会看到结果中只包含每个大洲的一个国家/地区。