在pandas python

时间:2017-04-23 12:12:24

标签: python pandas

我说我有一个DataFrame,数据按时间排序。我有一个列作为权重,我想找到相对于当前索引的最大权重。例如,第10行的最大值将是从元素11到结尾。 我最后写了这个函数。但是性能是一个很大的威胁。

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


有没有比这更好的方法来进行操作?


1 个答案:

答案 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