2014-02-05 3 views
0

Учитывая, что объект группы pandas DataFrame 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() на оригинальном GroupBy by_name:

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

Смежные вопросы