2017-04-23 76 views
1

讓我說我有一個DataFrame,其中的數據是按照時間排序的。我有一列作爲權重,我想找到相對於當前指數的最大權重。例如,第10行的最大值將從元素11到結尾。
我結束了寫這個功能。但是,表現是一個很大的威脅。獲取相對於熊貓中當前索引的最大值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 


有什麼更好的辦法做到比這個操作?


+0

請提供您的數據的樣本。給定 – pshep123

+0

...用增強的代碼更新了問題 –

回答

2

您可以使用cummaxiloc反向順序:

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 ['權重'] [:: - 1] .cummax()' – jezrael