somme maximale de n jours consécutifs utilisant des pandas


Naru

J'ai vu des solutions dans différents langages (c'est-à-dire SQL, fortran ou C++) qui font principalement des boucles for.

J'espère que quelqu'un pourra m'aider à résoudre cette tâche en utilisant plutôt des pandas.


Si j'ai un bloc de données qui ressemble à ceci.

      date  pcp  sum_count  sumcum
 7/13/2013  0.1        3.0    48.7
 7/14/2013 48.5
 7/15/2013  0.1
 7/16/2013
  8/1/2013  1.5        1.0     1.5
  8/2/2013
  8/3/2013
  8/4/2013  0.1        2.0     3.6
  8/5/2013  3.5
 9/22/2013  0.3        3.0    26.3
 9/23/2013 14.0
 9/24/2013 12.0
 9/25/2013
 9/26/2013
 10/1/2014  0.1       11.0   
 10/2/2014 96.0              135.5
 10/3/2014  2.5
 10/4/2014 37.0
 10/5/2014  9.5
 10/6/2014 26.5
 10/7/2014  0.5
 10/8/2014 25.5
 10/9/2014  2.0
10/10/2014  5.5
10/11/2014  5.5

Et j'espérais pouvoir faire les choses suivantes :

ÉTAPE 1 : créez la colonne sum_count en déterminant le nombre total de non-zéros consécutifs dans la colonne 'pcp'.

ÉTAPE 2 : créez la colonne sumcum et calculez la somme des 'pcp' non consécutifs.

ÉTAPE 3 : créez un tableau croisé dynamique qui ressemblera à ceci :

year   max_sum_count
2013   48.7
2014   135.5

MAIS!! le max_sum_count est basé sur la condition lorsque sum_count = 3


J'apprécierais toute aide! Merci!


QUESTION MISE À JOUR :

J'ai déjà souligné que le sum_count ne devrait renvoyer que le maximum de 3 pcps consécutifs. Mais j'ai donné par erreur le mauvais bloc de données, j'ai dû le modifier. Désolé.

La somme de 135,5 est venue de 96,0 + 2,5 + 37,0. C'est le maximum de 3 pcps consécutifs dans le sum_count 11.

Merci

Jezréel

Utilisation:

#filtering + rolling by days
N = 3

df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

#test NaNs
m = df['pcp'].isna()

#groups by consecutive non NaNs
df['g'] = m.cumsum()[~m]

#extract years
df['year'] = df.index.year

#filter no NaNs rows
df = df[~m].copy()

#filter rows greater like N
df['sum_count1'] = df.groupby(['g','year'])['g'].transform('size')
df = df[df['sum_count1'].ge(N)].copy()


#get rolling sum per groups per N days
df['sumcum1'] = (df.groupby(['g','year'])
                   .rolling(f'{N}D')['pcp']
                   .sum()
                   .reset_index(level=[0, 1], drop=True))

#get only maximal counts non NaN and consecutive datetimes
#add missing years
r = range(df['year'].min(), df['year'].max() + 1)
df1 = df.groupby('year')['sumcum1'].max().reindex(r).reset_index(name='max_sum_count')

print (df1)
   year  max_sum_count
0  2013           48.7
1  2014          135.5

Articles connexes


Somme des valeurs des jours consécutifs

RegressAvant Conformément à une question précédente , imaginez que j'ai un ensemble de données: Date rain code 2009-04-01 0.0 0 2009-04-02 0.0 0 2009-04-03 0.0 0 2009-04-04 0.7 1 2009-04-05 54.2 1 2009-04-06 0.0 0 2009-04-07 5.0 1 2009-04-0

somme maximale de n éléments consécutifs du tableau

swap96 Comment trouver la somme maximale des nnombres consécutifs d'un tableau? Par exemple, si notre tableau est {2,5,3,4,6}et que la n == 2sortie doit être 10(ie 6 + 4). Je suis en mesure d'obtenir la bonne logique pour les petites valeurs de taille de table

Python: occurrence maximale de jours consécutifs

Phillip J'ai un fichier d'entrée: ID,ROLL_NO,ADM_DATE,FEES 1,12345,01/12/2016,500 2,12345,02/12/2016,200 3,987654,01/12/2016,1000 4,12345,03/12/2016,0 5,12345,04/12/2016,0 6,12345,05/12/2016,100 7,12345,06/12/2016,0 8,12345,07/12/2016,0 9,12345,08/12/2016,0 10

Pandas - Somme cumulée des pandas consécutifs

Milo Vintimille J'ai un dataframe comme celui-ci : Name_A ¦ date1 ¦ 1 Name_A ¦ date2 ¦ 0 Name_A ¦ date3 ¦ 1 Name_A ¦ date4 ¦ 1 Name_A ¦ date5 ¦ 1 Name_B ¦ date6 ¦ 1 Name_B ¦ date7 ¦ 1 Name_B ¦ date8 ¦ 0 Name_B ¦ date9 ¦ 1 Et j'aimerais obten

Compter les jours consécutifs par pandas de produits

Anologicon: J'ai besoin de connaître le nombre de jours de repos que chaque produit a vendu par ligne. Exemple "Au jour 1, le produit AX1 en avait vendu 3, et le produit AX2 en avait vendu 2 le jour 1" J'ai ceci: Product | Date | Sales AX1 |2019-01-

Attribuer des numéros de jours consécutifs aux dates

JParkDS La base de données avec laquelle je travaille comporte deux colonnes : 1) l'identifiant de la personne et 2) la date. J'essaie d'attribuer des valeurs de jour numériques de date pour chaque personne. Par exemple, la personne 1 a une date du 01-01-2016

Calcul de jours consécutifs

bish lorsqu'un utilisateur se connecte à son compte, je veux calculer depuis combien de jours consécutifs cet utilisateur s'est connecté. Pour cela, je stocke l'horodatage $loginSinceet le calcul des jours consécutifs avec cette formule: $consecutiveDays = (in