Python 如何从每个组中获取行的子集

Python 如何从每个组中获取行的子集,python,group-by,pandas,Python,Group By,Pandas,给定熊猫数据帧的groupby对象by_name,我希望能够从每个组中选择n行 我本来希望.tail()函数可以完成它,但失败了 d = { 'name': ['Tom', 'John', 'Tom', 'Tom', 'John'], 'age': [18,54,27,44,12] } df = pd.DataFrame(d) by_name = df.groupby('name') two_rows_each = by_name.tail(2) 好的,它确实选择了我想要

给定熊猫数据帧的groupby对象
by_name
,我希望能够从每个组中选择n行

我本来希望
.tail()
函数可以完成它,但失败了

d = {
    'name': ['Tom', 'John', 'Tom', 'Tom', 'John'],
    'age': [18,54,27,44,12]
}

df = pd.DataFrame(d)

by_name = df.groupby('name') 
two_rows_each = by_name.tail(2)
好的,它确实选择了我想要的行数,但是我不能在这个新对象上应用
size()
方法

print two_rows_each.size()
引发
AttributeError:“DataFrame”对象没有属性“size”

虽然我可以在原始groupby
by_name
上使用
size()

name
John    2
Tom     3
dtype: int64
我需要两者,从分组对象中选择X行,然后再获取组的大小


有什么建议吗?

好的,我想我理解你的意思,试试这个:

import pandas as pd
d = {
    'name': ['Tom', 'John', 'Tom', 'Tom', 'John','Mike'],
    'age': [18,54,27,44,12,90]
}

df = pd.DataFrame(d)
df1 = df.groupby('name').tail(2)
print df1.groupby('name').size()

刚刚添加了
Mike
,以在末尾至少获得一个不同的值2;)

您希望得到什么?一个groupby对象,每个组中只出现两次(给定上述代码),这样我就可以对其使用
size()
方法。正如错误所述,没有
size
,您是在追求
shape
?为什么没有大小
by_name
对象确实有大小,并且每个都相同se@nutship这并不影响数据帧没有
size
属性或方法,您必须使用
shape
,它们是完全不同的对象类型hanks,这似乎是我需要的。奇怪的是,我在代码后面得到了
AssertionError()
,我必须检查是什么导致了这一点,稍后我会回来接受这一点。