31

パンダのデータフレームに次のようなデータセットがあります。

                                  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

発生する測定数のカウントを取得する必要があるため、次のようなものを探しています。

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

センチメント列は気にしません。1 日あたりの発生回数が必要です。

4

3 に答える 3

31

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)

次のようになり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'>

以下を使用できます。

print(df.groupby(df.index.date).count())

利回り

            score
2013-06-28      3
2013-06-29      2

パラメータの重要性に注意してparse_datesください。それがなければ、インデックスは単なるpandas.core.index.Indexオブジェクトになります。その場合、使用できませんでしdf.index.dateた。

したがって、答えは、あなたが示していない に依存しtype(df.index)ます...

于 2013-07-17T17:27:32.483 に答える
22

それ以外の場合は、resample関数を使用します。

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

更新:パンダ0.18+

@jbochi が指摘したように、 resample withhowは非推奨になりました。代わりに使用してください:

df.resample('D').apply({'score':'count'})
于 2015-04-09T15:24:56.610 に答える
12
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
于 2013-07-17T17:21:47.680 に答える