Pandas .groupby() est votre ami.
>>> df
id date value
0 1 2017-01-01 10
1 1 2017-01-01 20
2 1 2017-01-02 10
3 1 2017-01-02 15
4 1 2017-01-07 25
5 2 2017-05-01 10
6 2 2017-05-01 15
7 2 2017-05-20 30
8 3 2010-08-08 40
9 3 2010-08-11 20
10 3 2010-08-11 43
groupe
les données de la date et l'identifiant de sorte qu'il ne sera pas sommé avec .sum()
. as_index=False
fait en sorte que la colonne date ne devienne pas l'index. sort=False
fait en sorte qu'il ne soit pas trié par dates.
>>> g = df.groupby(['date', 'id'], as_index=False, sort=False).sum()
>>> g
date id value
2 2017-01-01 1 30
3 2017-01-02 1 25
4 2017-01-07 1 25
5 2017-05-01 2 25
6 2017-05-20 2 30
0 2010-08-08 3 40
1 2010-08-11 3 63
Il est un peu ambigu ce que vous entendez par la deuxième partie, mais en supposant que cela signifie que la somme cumulée de l'égalité ids:
>>> g['index'] = g.assign(count=1).groupby('id').cumsum()['count']
>>> g
date id value index
2 2017-01-01 1 30 1
3 2017-01-02 1 25 2
4 2017-01-07 1 25 3
5 2017-05-01 2 25 1
6 2017-05-20 2 30 2
0 2010-08-08 3 40 1
1 2010-08-11 3 63 2
ici nous attribuons g['index']
à la somme cumulative de la colonne count
nous donnez à la trame de données une valeur égale à un pour chaque élément. Si ce que vous vouliez réellement dire était la somme cumulée de chaque mois similaire, cela peut être fait en groupant par df.date.dt.month
et en appliquant une méthode similaire.
'ajouter et une colonne de ce qui concerne l'indice du dates' S'il vous plaît expliquer cela plus en détail. –