C'est mon dataframe


date                          cash   name
2020-06-04 06:32:09.244641    248    Player 1
2020-06-04 06:32:09.729418    217    Player 2
2020-06-04 06:32:10.123283    521    Player 3
2020-06-04 06:32:11.002336    527    Player 4
2020-06-04 06:32:18.049471    616    Player 5
...
2020-06-04 06:42:10.244641    258    Player 1
2020-06-04 06:42:10.729418    227    Player 2
2020-06-04 06:42:11.523283    531    Player 3
2020-06-04 06:42:12.002336    529    Player 4
2020-06-04 06:42:17.049471    636    Player 5

Il s'agit d'une série chronologique du montant d'argent par joueur. Comment obtiendriez-vous le montant total en espèces sous forme de série chronologique?

Donc, dans ce cas, cela devrait être quelque chose comme ceci:

2020-06-04 06:32:09.244641    248 + 217 + 521 + 527 + 616
2020-06-04 06:42:17.049471    258 + 227 + 531 + 529 + 636

Comment y parvenir?

1
user2997204 5 juin 2020 à 04:00

3 réponses

Meilleure réponse

Ce n’est pas le résultat attendu, mais votre dernier commentaire Je voudrais voir le montant total d’argent dans le jeu par horodatage me fait penser que vous pourriez rechercher le montant cumulé {{X0} }, en tenant compte du premier montant du joueur et ensuite lorsque le même payeur est à nouveau dans les données vous voulez juste compter pour la différence de leur montant avec groupby.diff.

df['total_cash'] = (df.groupby('name')['cash'].diff() #evolution of cash per player
                      .fillna(df['cash']) # add the original value
                      .cumsum()
                   )
print (df)
                        date  cash      name  total_cash
0 2020-06-04 06:32:09.244641   248  Player 1       248.0
1 2020-06-04 06:32:09.729418   217  Player 2       465.0 #here it is 248+217
2 2020-06-04 06:32:10.123283   521  Player 3       986.0
3 2020-06-04 06:32:11.002336   527  Player 4      1513.0
4 2020-06-04 06:32:18.049471   616  Player 5      2129.0 #sum of player 1 to 5
5 2020-06-04 06:42:10.244641   258  Player 1      2139.0 #+10 for palyer 1 so +10 in total
6 2020-06-04 06:42:10.729418   227  Player 2      2149.0
7 2020-06-04 06:42:11.523283   531  Player 3      2159.0
8 2020-06-04 06:42:12.002336   529  Player 4      2161.0
9 2020-06-04 06:42:17.049471   636  Player 5      2181.0
1
Ben.T 5 juin 2020 à 01:24

Nous pouvons essayer

df.groupby(df.date.dt.strftime('%Y-%m-%d %H:%M')).agg({'date':'first','cash':'sum'})
1
YOBEN_S 5 juin 2020 à 01:07

Votre logique est essentiellement groupée par le cumcount sur name:

(df.groupby(df.groupby('name').cumcount())
   .agg({'date':'min','cash':'sum'})
)

Production:

                         date  cash
0  2020-06-04 06:32:09.244641  2129
1  2020-06-04 06:42:10.244641  2181
1
Quang Hoang 5 juin 2020 à 01:05