总结每天大熊猫的发生次数

myu*_*uf3 22 python dataframe pandas

我在pandas数据帧中有这样的数据集:

                                  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
Run Code Online (Sandbox Code Playgroud)

我需要计算测量次数的计数,所以我正在寻找这样的东西:

                                    count
   timestamp
   2013-06-29                       2
   2013-06-28                       3
Run Code Online (Sandbox Code Playgroud)

我不关心我想要每天发生次数的情绪栏.

unu*_*tbu 22

如果您的timestamp索引是DatetimeIndex:

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)
Run Code Online (Sandbox Code Playgroud)

所以df看起来像这样:

                        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'>
Run Code Online (Sandbox Code Playgroud)

您可以使用:

print(df.groupby(df.index.date).count())
Run Code Online (Sandbox Code Playgroud)

产量

            score
2013-06-28      3
2013-06-29      2
Run Code Online (Sandbox Code Playgroud)

请注意parse_dates参数的重要性.没有它,索引就只是一个pandas.core.index.Index对象.在这种情况下你无法使用df.index.date.

所以答案取决于type(df.index)你没有展示的......


gow*_*oww 14

否则,使用重新采样功能.

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
Run Code Online (Sandbox Code Playgroud)

更新:熊猫0.18+

正如@jbochi指出的那样,how现在不推荐重新采样.改为使用:

df.resample('D').apply({'score':'count'})
Run Code Online (Sandbox Code Playgroud)

  • 现在不推荐使用`how`重新取样.你应该使用`df.resample('D').apply({'score':'count'})` (2认同)

Tom*_*ger 8

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
Run Code Online (Sandbox Code Playgroud)