Ich habe einen Datenrahmen wie diese, die den Wert bestimmter Gegenstände (ids) über die Zeit verfolgt:Python: Maximal von einer anderen Spalte ausgeführt?
mytime=np.tile(np.arange(0,10) , 2)
myids=np.repeat([123,456], [10,10])
myvalues=np.random.random_integers(20,30,10*2)
df=pd.DataFrame()
df['myids']=myids
df['mytime']=mytime
df['myvalues']=myvalues
+-------+--------+----------+--+--+
| myids | mytime | myvalues | | |
+-------+--------+----------+--+--+
| 123 | 0 | 29 | | |
+-------+--------+----------+--+--+
| 123 | 1 | 23 | | |
+-------+--------+----------+--+--+
| 123 | 2 | 26 | | |
+-------+--------+----------+--+--+
| 123 | 3 | 24 | | |
+-------+--------+----------+--+--+
| 123 | 4 | 25 | | |
+-------+--------+----------+--+--+
| 123 | 5 | 29 | | |
+-------+--------+----------+--+--+
| 123 | 6 | 28 | | |
+-------+--------+----------+--+--+
| 123 | 7 | 21 | | |
+-------+--------+----------+--+--+
| 123 | 8 | 20 | | |
+-------+--------+----------+--+--+
| 123 | 9 | 26 | | |
+-------+--------+----------+--+--+
| 456 | 0 | 26 | | |
+-------+--------+----------+--+--+
| 456 | 1 | 24 | | |
+-------+--------+----------+--+--+
| 456 | 2 | 20 | | |
+-------+--------+----------+--+--+
| 456 | 3 | 26 | | |
+-------+--------+----------+--+--+
| 456 | 4 | 29 | | |
+-------+--------+----------+--+--+
| 456 | 5 | 29 | | |
+-------+--------+----------+--+--+
| 456 | 6 | 24 | | |
+-------+--------+----------+--+--+
| 456 | 7 | 21 | | |
+-------+--------+----------+--+--+
| 456 | 8 | 27 | | |
+-------+--------+----------+--+--+
| 456 | 9 | 29 | | |
+-------+--------+----------+--+--+
ich bräuchten den Lauf Maximum für jede ID zu berechnen.
np.maximum.accumulate()
würde die Lauf maximal unabhängig von id berechnen, während ich eine ähnliche Berechnung benötigen, die jedesmal, wenn die ID ändert jedoch zurückgesetzt. Ich kann mir ein einfaches Skript vorstellen, um es in numba zu tun (ich habe sehr große Arrays und nicht-vektorisierter Non-Numba-Code wäre langsam), aber gibt es einen einfacheren Weg, es zu tun?
Mit nur zwei Werten, die ich laufen kann:
df['running max']= np.hstack(( np.maximum.accumulate(df[ df['myids']==123 ]['myvalues']) , np.maximum.accumulate(df[ df['myids']==456 ]['myvalues'])) )
aber dies ist nicht möglich mit viel, viel Wert.
Danke!
[Pandas groupby] (http://pandas.pydata.org/pandas-docs/stable/groupby.html) - Sie schreiben Sie Ihre eigenen und akzeptieren antwort ... – gboffi
ich gruppiere von myids, was genau? Ich bin sicher, dass es nur ich dick zu sein, aber ich komme aus einem SQL-Hintergrund und ich kämpfe wirklich meinen Kopf um Pandas zu bekommen (auch die grausamsten Dokumentation nicht hilft) ... –
'df.groupby (‚myid‘) [ 'MyValues']. cummax() 'ist ziemlich nah dran, aber ich weiß nicht, wie weiter verfahren ist ...' .cummax() '' nimmt eine Achse = 'Argument aber, als Pandas Ignorant. Ich weiß nicht, wie man es benutzt (jedenfalls ist es nicht genau eine numpy 'Achse =') – gboffi