2014-06-10 3 views
0

У меня есть серия «входящая», который выглядит следующим образом:Панда: применить функцию к мультииндексированной серии

number.hash        local_time   
19ace78686acf5772212d77595cb7efdb52788bf 2011-04-29 12:00:00 1 
1a84708ae329e17438e8157165f91f3dec468eb6 2011-04-25 17:00:00 1 
1f5b196086ca35e752eb39e4e348ae925d030af9 2011-02-16 14:00:00 1 
              2011-02-16 15:00:00 0 
              2011-02-16 16:00:00 0 

, где numbers.hash и LOCAL_TIME вместе мультииндекс. Теперь я хочу применить любую функцию к каждой серии, индексированной только числами.hash, например. суммируя значения в каждом временном ряду, который состоит из local_time и значения. Наверное, я могу получить индексы number.hash и перебирать их, но должен быть более эффективный и чистый способ сделать это.

+0

Посмотрите на сайте панды для 'GroupBy/Группирование' , Это можно сделать с помощью: 'df.groupby (level = 0) .sum()'. –

ответ

3
In [36]: s = Series([1,1,1,0,0],pd.MultiIndex.from_tuples([ 
('A',Timestamp('20110429 12:00:00')), 
('B',Timestamp('20110425 17:00:00')), 
('C',Timestamp('20110216 14:00:00')), 
('C',Timestamp('20110426 15:00:00')), 
('C',Timestamp('20110426 16:00:00'))])) 


A 2011-04-29 12:00:00 1 
B 2011-04-25 17:00:00 1 
C 2011-02-16 14:00:00 1 
    2011-04-26 15:00:00 0 
    2011-04-26 16:00:00 0 
dtype: int64 

Сумма по уровню (они векторизации и очень быстро)

In [37]: s.sum(level=0) 
Out[37]: 
A 1 
B 1 
C 1 
dtype: int64 

Или GroupBy и применить произвольную функцию

In [38]: s.groupby(level=0).apply(lambda x: x.sum()) 
Out[38]: 
A 1 
B 1 
C 1 
dtype: int64 
+0

Спасибо, я знал, что будет такой простой способ. – hajons

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