0
votes

somme pour id'sin python

J'ai ci-dessous Dataframe appelé "DF" et calculer le dernier montant de la somme de l'ID unique appelé

import pandas as pd
from dateutil import parser
from datetime import datetime, timedelta
df= {'Date':['2019-01-11 10:23:45','2019-01-09 10:23:45', '2019-01-11 10:27:45',
             '2019-01-11 10:25:45', '2019-01-11 10:30:45', '2019-01-11 10:35:45',
             '2019-02-09 10:25:45'],
     'Fruit id':['100','200','300','100','100', '100','200'],
     'X':[200,400,330,100,300,200,500],
  
     }
df= pd.DataFrame(df)
df["Date"] = pd.to_datetime(df['Date'])


4 commentaires

Quel est le nombre d'identifiant de fruit unique S?


C'est juste une clé pour identifier les fruits vendus à temps en particulier. (100 se réfère aux fruits de la mangue, 200 se réfèrent aux fruits de la banane, etc.)


Quelle est la taille de votre ensemble de données? Une fusion de soi serait suffisante.


Environ 5 millions de lignes ... Comment faire une approche de moi-même? ... Pouvez-vous m'aider..Je nouveau à Python.


4 Réponses :


1
votes

pivot_table code> pourrait être utile ici.

df.sort_values(by='Date', inplace=True)
newdf = pd.pivot_table(df, columns='Fruit id', index='Date', aggfunc=np.sum, values='Amount').rolling('30min', closed='left').sum().sort_index()
newdf['Fruit id'] = df['Fruit id'].values
df['count_ncc_amt'] = newdf.apply(lambda row: row[row['Fruit id']], axis=1).values
print(df)

                 Date Fruit id  NCC  Amount  Sys  count_ncc_amt
1 2019-01-09 10:23:45      200  100     400    0            NaN
0 2019-01-11 10:23:45      100  100     200    1            NaN
3 2019-01-11 10:25:45      100  100     100    0          200.0
2 2019-01-11 10:27:45      300  200     330    1            NaN
4 2019-01-11 10:30:45      100  100     300    1          300.0
5 2019-01-11 10:35:45      100  100     200    0          600.0
6 2019-02-09 10:25:45      200  100     500    1            NaN


7 commentaires

Pouvons-nous créer les sorties similaires comme les miennes après cela?


Avez-vous eu le travail? Je pense que Maddy a besoin de frutid et de la CCC dans les colonnes du pivot. Et puis vous pouvez simplement newdf = newdf.stack (). Stack (). Réinitialiser_index () . Je ne suis pas chez mon bureau, essayez ceci sans Newdf ['ID de fruit'] = ... et la ligne suivante


@Richiev désolé mais ce que vous avez suggéré de ne pas travailler ou que je pourrais mal compromis quelque chose.


@Siamak Safari Peut-on ajouter des secondes au lieu de minutes dans le code?


@ MADDY6 Oui Vous pouvez utiliser différentes fréquences, regarder dans Pandas .pydata.org / Pandas-Docs / Stable / user_Guide / ... Pour plus d'options.


Merci! .. Comment ajouter ce filtre DF ['SYS'] == 1? .... J'ai utilisé ce filtre dans mon code.


@ Maddy6 vous voulez dire df [df ['sys'] == 1] ? C'est une indexation booléenne.



0
votes

La partie qui saute est que vous filtrant tout le DF une fois pour chaque rangée, et je suppose que vous obtenez une petite fraction de lignes pour chaque fois.

Je vais essayer d'écrire le code complet plus tard. Mais vous pouvez essayer de le réparer avec des pointeurs: xxx


0 commentaires

0
votes

Essayons avec groupeby: xxx

ou avec fusion croisée: xxx

sortie: xxx


1 commentaires

Comment ajouter df ['sys'] == 1 filtre dans le code? .. je le fais dans mon code



0
votes

Si vous voulez seulement la fenêtre de 30 minutes la plus récente (non le jeu de données complète avec un million de lignes), vous pouvez utiliser pd.timédielta () : xxx

Maintenant calcule maintenant Statistiques récapitulatives sur df_recent


0 commentaires