2014-02-05 11 views
0

給定一個熊貓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 by_name使用size()

name 
John 2 
Tom  3 
dtype: int64 

我需要同時,從分組的對象選擇X行,後來得到的尺寸組。

有什麼建議嗎?

+0

你到底希望得到什麼? –

+0

每個組中只有兩次出現的groupby對象(給定上面的代碼),這樣我就可以在其上使用'size()'方法。 – nutship

+0

錯誤狀態沒有'size',你在'shape'之後嗎? – EdChum

回答

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月末不同的值;)

+0

謝謝,這似乎是我需要的。奇怪的是,後來在我的代碼中出現了'AssertionError()',我必須檢查是什麼原因造成的,後來又回來接受這個。 – nutship

相關問題