2013-07-17 22 views
13

Bir panda veri kartelasında olduğu gibi bir veri kümem var.Günlük pandaların sayısını toplama

        score 
timestamp         
2013-06-29 00:52:28+00:00  -0.420070 
2013-06-29 00:51:53+00:00  -0.445720 
2013-06-28 16:40:43+00:00   0.508161 
2013-06-28 15:10:30+00:00   0.921474 
2013-06-28 15:10:17+00:00   0.876710 

Ben olaylardan sayımı istiyorum ben duygu sütun hakkında ilgilendirmiyor Yüklü bu

        count 
    timestamp 
    2013-06-29      2 
    2013-06-28      3 

gibi bir şey arıyorum böylece ortaya ölçümlerin sayısı için sayar, almak gerekir günlük senin timestamp endeksi DatetimeIndex ise

+0

[yinelenen] (http://stackoverflow.com/questions/17288636/faster-way-to-groupby-time-of-day-in-pandas)? – TomAugspurger

cevap

16

:

import io 
import pandas as pd 
content = '''\ 
timestamp score 
2013-06-29 00:52:28+00:00  -0.420070 
2013-06-29 00:51:53+00:00  -0.445720 
2013-06-28 16:40:43+00:00   0.508161 
2013-06-28 15:10:30+00:00   0.921474 
2013-06-28 15:10:17+00:00   0.876710 
''' 

df = pd.read_table(io.BytesIO(content), sep='\s{2,}', parse_dates=[0], index_col=[0]) 

print(df) 

yüzden df şuna benzer:

     score 
timestamp      
2013-06-29 00:52:28 -0.420070 
2013-06-29 00:51:53 -0.445720 
2013-06-28 16:40:43 0.508161 
2013-06-28 15:10:30 0.921474 
2013-06-28 15:10:17 0.876710 

print(df.index) 
# <class 'pandas.tseries.index.DatetimeIndex'> 

Sen kullanabilirsiniz:

print(df.groupby(df.index.date).count()) 
  score 
2013-06-28  3 
2013-06-29  2 

Not parse_dates parametre önemi veren. Bu olmadan, dizin sadece bir pandas.core.index.Index nesnesi olur. Bu durumda df.index.date kullanamazsınız.

Yani cevap resample işlevini kullanarak, Yoksa ... sen olmadığını göstermiştir type(df.index), üzerinde

7
In [145]: df 
Out[145]: 
timestamp 
2013-06-29 00:52:28 -0.420070 
2013-06-29 00:51:53 -0.445720 
2013-06-28 16:40:43 0.508161 
2013-06-28 15:10:30 0.921474 
2013-06-28 15:10:17 0.876710 
Name: score, dtype: float64 

In [160]: df.groupby(lambda x: x.date).count() 
Out[160]: 
2013-06-28 3 
2013-06-29 2 
dtype: int64 
+0

'x.date' özelliği() –

+0

Huh ile birlikte çalışır. Biliyor musunuz, neden 'df.index [0] .date'' 'i döndürüyor? – TomAugspurger

+0

Hmm. Yapmam. @Andy? –

7

bağlıdır.

In [419]: df 
Out[419]: 
timestamp 
2013-06-29 00:52:28 -0.420070 
2013-06-29 00:51:53 -0.445720 
2013-06-28 16:40:43 0.508161 
2013-06-28 15:10:30 0.921474 
2013-06-28 15:10:17 0.876710 
Name: score, dtype: float64 

In [420]: df.resample('D', how={'score':'count'}) 

Out[420]: 
2013-06-28 3 
2013-06-29 2 
dtype: int64 

GÜNCELLEME: @jbochi belirttiği gibi

, how ile yeniden örneklemek pandalar ile 0.18+ artık uygun bulunmamaktadır. Bunun yerine kullanın:

df.resample('D').apply({'score':'count'}) 
+2

Şimdi 'nasıl yapılmıyor' ile örnekleme yapılmamaktadır. Df.resample ('D') kullanmalısınız.Uygulama ({'skor': 'count'}) ' – jbochi

İlgili konular