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

时间:2014-02-05 19:22:00

标签: python group-by pandas

鉴于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'

虽然我可以在size()原始群组中使用by_name

name
John    2
Tom     3
dtype: int64

我需要两个,从分组对象中选择X行,然后获取组的大小。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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

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的值;)