2017-04-23 11 views
1

私は、データが時間に関して順序付けされたDataFrameを持っているとしましょう。私は体重としての列を持っており、現在の指数に比例した最大の体重を求めたいと思います。たとえば、10行目で見つかった最大値は、要素11から最後までです。
私はこの機能を書いた。しかし、パフォーマンスは大きな脅威です。pandas pythonの現在のインデックスに関連した最大値を取得

import pandas as pd 

df=pd.DataFrame({"time":[100,200,300,400,500,600,700,800],"weights": 
[120,160,190,110,34,55,66,33]}) 
totalRows=df['time'].count() 
def findMaximumValRelativeToCurrentRow(row): 
index= row.name 
if index!= totalRows: 
    tempDf = df[index:totalRows] 
    val=tempDf['weights'].max() 
    df.set_value(index,'max',val) 
else: 
    df.set_value(index,'max',row['weights']) 

df.apply(findMaximumValRelativeToCurrentRow,axis=1) 
print df 


これ以上の操作を行うための任意のより良い方法はありますか?あなたが逆の順序のためにiloccummaxを使用することができます


+0

あなたのデータのサンプルを提供してください。 – pshep123

+0

が指定されました...エンハンスドコードで質問を更新しました –

答えて

2

print (df['weights'].iloc[::-1]) 
7  33 
6  66 
5  55 
4  34 
3 110 
2 190 
1 160 
0 120 
Name: weights, dtype: int64 

df['max1'] = df['weights'].iloc[::-1].cummax() 
print (df) 
    time weights max max1 
0 100  120 190.0 190 
1 200  160 190.0 190 
2 300  190 190.0 190 
3 400  110 110.0 110 
4 500  34 66.0 66 
5 600  55 66.0 66 
6 700  66 66.0 66 
7 800  33 33.0 33 
+0

iloc [:: - 1]は何をしていますか? –

+0

注文が変わる - 回答を編集します。 – jezrael

+0

また、 'df ['max1'] = df ['weights'] [:: - 1] .cummax()' – jezrael

関連する問題