在pandas python中获取相对于当前索引的最大值

2024-09-30 06:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个数据帧,其中数据是按照时间排序的。我有一个列作为权重,我想找到相对于当前索引的最大权重。例如,第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


有比这更好的手术方法吗?在



Tags: 数据dfindextimevaluevalmaxrow
1条回答
网友
1楼 · 发布于 2024-09-30 06:21:52

您可以将^{}^{}一起使用以反转顺序:

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

相关问题 更多 >

    热门问题