我有這樣一個數據幀,它隨着時間的推移跟蹤某些項目(IDS)的值:Python:最多由另一列運行?
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 | | |
+-------+--------+----------+--+--+
我需要計算運行最大值每個ID。
np.maximum.accumulate()
會計算運行最大值而不管id,而我需要一個類似的計算,但是每次id改變都會重置。我可以想到一個簡單的腳本來做它在numba(我有非常大的數組和非矢量化的非Numba代碼會很慢),但有沒有更簡單的方法來做到這一點?
只有兩個值,我可以運行:
df['running max']= np.hstack(( np.maximum.accumulate(df[ df['myids']==123 ]['myvalues']) , np.maximum.accumulate(df[ df['myids']==456 ]['myvalues'])) )
但這不是用很多很多的價值是可行的。
謝謝!
[大熊貓GROUPBY](http://pandas.pydata.org/pandas-docs/stable/groupby.html) - 你可以寫,接受自己回答... – gboffi
我是由myids組成的,那麼,究竟是什麼?我確信它只是我很厚,但我來自SQL背景,我真的很難圍繞熊貓(也是殘酷的文檔沒有幫助)...... –
'df.groupby('myid' )['myvalues']。cummax()'非常接近,但我不知道如何繼續......'.cummax()'需要'axis ='參數,但是作爲熊貓的無知。我不知道如何使用它(反正它不完全是一個numpy'axis =') – gboffi