2017-04-23 53 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