【发布时间】:2014-03-02 10:22:37
【问题描述】:
给定一个 pandas DataFrame 的 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' object has no attribute 'size'
虽然我可以在原来的groupby上使用size()by_name:
name
John 2
Tom 3
dtype: int64
我需要两者,从分组对象中选择 X 行,然后获取组的大小。
有什么建议吗?
【问题讨论】:
-
您希望得到什么?
-
一个 groupby 对象,每个组中只有两次出现(给定上面的代码),这样我就可以使用
size()方法了。 -
错误状态下没有
size,你在shape之后吗? -
为什么没有size?
by_name对象确实有大小,并且本身是相同的 -
@nutship 不影响数据框没有
size属性或方法这一事实,您必须使用shape,它们是完全不同的对象类型