at summere antallet af hændelser per dag pandas

Jeg har et data sæt, som så i en pandaer dataframe:

                                  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

Jeg har brug for at komme tæller for antal målinger, der opstår, så jeg er på udkig efter noget som dette:

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

Jeg bryder mig ikke om den følelse, kolonne vil jeg optælling af hændelser per dag.

duplicate?

OriginalForfatteren myusuf3 | 2013-07-17

3 svar

  1. 19

    Hvis din timestamp indeks er en 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 ser ud som dette:

                            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'>

    Du kan bruge:

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

    der giver

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

    Opmærksom på betydningen af den parse_dates parameter. Uden det, at indekset ville bare være en pandas.core.index.Index objekt. I så fald vil du ikke kunne bruge df.index.date.

    Så svaret afhænger type(df.index), som du ikke har vist…

    OriginalForfatteren unutbu

  2. 12

    Anden måde, at bruge resample funktion.

    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

    OPDATERING : med pandaer 0.18+

    som @jbochi påpeget, resample med how er nu udfaset. Brug i stedet :

    df.resample('D').apply({'score':'count'})
    Resample med how er nu udfaset. Du skal bruge df.resample('D').apply({'score':'count'})

    OriginalForfatteren gowithefloww

  3. 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
    x.date værker som ejendom, med ()
    Hva’. Ved du hvorfor df.index[0].date returnerer <function date>?
    Hmm. Det gør jeg ikke. @Andy?
    Nå, date.index.date er en ejendom på indekset, som er af typen DatetimeIndex, mens index[0], er allerede kun et Tidsstempel, som ikke tilbyder den dato ejendom, men links til en metode til Timestamp.

    OriginalForfatteren TomAugspurger

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *