2014-10-21 2 views
0

Я пытаюсь отфильтровать группы небольших размеров и функции фильтра фильтров ValueError: отрицательные размеры не допускаются. Я не могу опубликовать свой код, это слишком специфично, и я не могу воспроизвести проблему с помощью случайного набора данных. Кто-нибудь сталкивался с этим? Я видел другой пост за ту же ошибку, но это было не слишком полезноPandas dataframe filiter из групп малых размеров

Как работаю, я пытаюсь сделать то же самое, что фильтр делает с groupby и применяется, но он не работает должным образом , Какие-либо предложения?

 dff = pd.DataFrame({'A': np.arange(8), 'B': list('aabbbbcc')}) 
     dff['C'] = np.arange(8) 

     def f(x): 
     if len(x)>2: 
      return x 
     else: 
      return None 
     dff.groupby('B').apply(f) 

     B 
     a   A B C 
     2 NaN NaN NaN 
     3 NaN NaN ... 
     b  A B C 
     2 2 b 2 
     3 3 b 3 
     4 4 b 4 
     5 ... 
     c   A B C 
     2 NaN NaN NaN 
     3 NaN NaN ... 
     dtype: object 
+0

Не было бы достаточно «dff.where (dff> 2)» для такого случая? – Manhattan

+0

@Nanashi: Нет. Это вернет значения dataframe, где значения> 2. OP хочет группировать столбец и возвращать фрейм данных только с теми группами, которые имеют более двух строк. – exp1orer

ответ

1

Проблема с примером кода является то, что apply не знает, что делать с None при вводе dataframe вместе. Функция apply должна выводить объект того же типа каждый раз. Если вы вернете pd.DataFrame() вместо None, вы должны получить то, что ищете.

+0

Вот и все! Благодаря! 'def f (x): if len (x)> 2: return x else: return pd.DataFrame (columns = x.columns) dff.groupby ('B', group_keys = False) .apply (f) ' – Lamakaha

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