2015-04-02 2 views
0

У меня есть кадр данных, который содержит данные некоторых time на основе:Панда: Группа по годам и сюжетного плотности

>>> temp.groupby(pd.TimeGrouper('AS'))['INC_RANK'].mean() 
date 
2001-01-01 0.567128 
2002-01-01 0.581349 
2003-01-01 0.556646 
2004-01-01 0.549128 
2005-01-01   NaN 
2006-01-01 0.536796 
2007-01-01 0.513109 
2008-01-01 0.525859 
2009-01-01 0.530433 
2010-01-01 0.499250 
2011-01-01 0.488159 
2012-01-01 0.493405 
2013-01-01 0.530207 
Freq: AS-JAN, Name: INC_RANK, dtype: float64 

А теперь я хотел бы построить плотность для каждого года. Следующая команда используется для работы других кадров данных, но не здесь:

>>> temp.groupby(pd.TimeGrouper('AS'))['INC_RANK'].plot(kind='density') 
ValueError: ordinal must be >= 1 

Вот как этот столбец выглядит следующим образом:

>>> temp['INC_RANK'].head() 
date 
2001-01-01 0.516016 
2001-01-01 0.636038 
2001-01-01 0.959501 
2001-01-01   NaN 
2001-01-01 0.433824 
Name: INC_RANK, dtype: float64 

ответ

0

Я думаю, что это связано с nan в ваших данных, поскольку плотность не может быть оценена для nan с. Однако, поскольку вы хотите визуализировать плотность, не стоит просто просто отказаться от отсутствующих значений, предполагая, что недостающие/ненаблюдаемые ячейки должны следовать тому же распределению, что и наблюдаемые/не пропускающие ячейки. Поэтому достаточно df.dropna().groupby(pd.TimeGrouper('AS'))['INC_RANK'].plot(kind='density').

С другой стороны, если отсутствующие значения не являются «ненаблюдаемыми», а являются значениями из диапазона измерения (скажем, данные от датчика температуры, который считывает 0 ~ 50F, но иногда встречается 100F умеренный Датчик отправляет код ошибки и записывается как отсутствующее значение), то dropna(), вероятно, не очень хорошая идея.

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