2016-07-05 4 views
0

Я хочу вычислить среднее значение абсолютного значения сгруппированного объекта.среднее значение абсолютной величины groupby object pandas

I.e.

grouped = df.groupby([pd.TimeGrouper(3MS)]) 

dct['x'] = grouped['profit'].agg('mean')/grouped['cost'].abs().agg('mean') 

Однако приведенный выше код приводит к ошибке. Я пробовал различные варианты вышеуказанного кода, но до сих пор все они приводят к ошибкам.

Должен быть простой способ сделать это.

Update:

Это dataframe, что группируется VI pd.TimeGrouper (3 мс). Я хочу принять абсолютное значение стоимости столбца 1, а затем вычислить среднее значение.

  cost1 cost2 cost3 cost4 
date                  
2016-03-31  -490.60  -118.10   -344.87   -91.44 
2016-04-30  -188.74   -55.99   -259.23   -75.16 
2016-05-31  -158.62   -43.58   -176.37   -21.98 

Я пытался сделать grouped['cost1'].abs().mean(), но я получил:

/Users/User1/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in __getattr__(self, attr) 
    493    return self[attr] 
    494   if hasattr(self.obj, attr): 
--> 495    return self._make_wrapper(attr) 
    496 
    497   raise AttributeError("%r object has no attribute %r" % 

/Users/User1/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in _make_wrapper(self, name) 
    507     "using the 'apply' method".format(kind, name, 
    508              type(self).__name__)) 
--> 509    raise AttributeError(msg) 
    510 
    511   # need to setup the selection 

AttributeError: ("Cannot access callable attribute 'abs' of 'SeriesGroupBy' objects, try using the 'apply' method", u'occurred at index 0') 
+2

можете ли вы разместить некоторые данные образца и какова ваша ошибка? В противном случае мы догадываемся, что здесь не так. – ako

+0

Я добавил информацию, которую вы предложили. Спасибо за предложение помочь. – codingknob

ответ

0

На основании вашего обновления, я думаю, вы ищете одно среднее значение, принятое по абсолютным значениям для группы.

Использование grouped.apply(abs).mean() будет применять abs функции к значениям в группе (cost1 и т.д.), и mean даст вам среднее значение для любой вашей группировки переменная.

Вы можете также просто применить функцию abs перед группировкой, а затем непосредственно использовать функцию mean.

0

Вы, вероятно, получить ошибку, потому что вы не можете использовать .agg на объекте Sereis.

Вы не разместили свой сгруппированный объект, поэтому я не знаю, есть ли другие проблемы, но вы должны попробовать его таким образом. Я думаю, что это должно сработать:

dct['x'] = grouped['profit'].mean()/grouped['cost'].abs().mean() 
+0

Спасибо, Джо за ответ. Я просто добавил дополнительную информацию к своему сообщению. – codingknob

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