2015-07-30 3 views
0

Я пытаюсь сбросить строки с значениями «count» меньше 10 в моем фрейме. Моя dataframe в настоящее время выглядит следующим образом:значения, не возвращаемые в dataframe

person id  count 
0 p1 760431192 20 
1 p2 101663519 1 
2 p3 325694288 2 
3 p4 338468584 1 
4 p5 2337087786 18 

Я слился столбец счетчика с функцией df.merge Основы столбца ID:

df = df.merge(dframe, on='id', how='left') 

Так что, когда я пытаюсь бросить строки со счетчиком < 10, я получаю следующее сообщение об ошибке:

df = df[df.count>=10] 
KeyError: True 

Однако, когда я использую этот же код на любой другой колонке, говорят:

df = df[df.id==760431192] 
df = df[df.person==p2] 

Код работает отлично, и я получаю dataframe, которого я ожидал. Любая идея, почему код не работает над объединенным столбцом «count»?

ответ

1

df.count не является колонкой, это метод DataFrame.count. Таким образом, вы не сравниваете dataframe с числом (давая элементарные логические результаты), вы сравниваете метод с числом, для которого нет правила. В Python 2, когда нет никакого правила для сравнения, оно возвращается к стандарту «произвольное, но последовательное» по умолчанию, которое дает один логический ответ.

В Python 3, это правило по умолчанию было удалено, а ошибка, которую вы получите дает гораздо лучшее представление о том, что происходит:

>>> df.count >= 10 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unorderable types: method() >= int() 

В любом случае, решение, чтобы получить эту колонку, как df['count'] вместо:

>>> df[df['count'] >= 10] 
    person   id count 
0  p1 760431192  20 
4  p5 2337087786  18 
0

Другой способ добавить количество уникальных элементов обратно в исходное DataFrame является использование groupby вместе с transform:

df['count'] = df.groupby('id').transform('count') 

Теперь вы можете отфильтровать строки с числом менее десяти:

df = df[df['count'] >= 10] 
Смежные вопросы