我有一个这样的数据框:

VALUE   ATTRIBUTE
300         K
200         B
100         CC
150         D
100         EF
150         G
100         T
200         D
300         EF
400         T
350         G
400         F
550         FE
600         EF
700         D
650         F
400         EF
300         R


对于每一行,我想在下一行中执行滚动窗口(大小= 5)并返回:


最大值
相关属性


例如,第一行(300 K)必须返回两个:


下5行的最大值=> 200
相关属性=> B


我将在以后的序列中执行滚动窗口(不在上一个序列中)。因此,我正在转移代码。

由于我能够返回MAX_VALUE,但是却不知道如何返回与最大值相关的ATTRIBUTE,因此我遇到了问题。以下是我当前正在运行的代码:

df['MAX_VALUE'] = df['VALUE'].rolling(5).max().shift(-5)


您对执行该功能有什么建议吗?

预期结果是:

VALUE   ATTRIBUTE   MAX_VALUE    ATTRIBUTE_MAX_VALUE
300         K       200      B
200         B       150      D
100         CC      200      D
150         D       300      EF
100         EF      400      T
150         G       400      T
100         T       400      T
200         D       550      FE
300         EF      600      EF
400         T       700      D
350         G       700      D
400         F       700      D
550         FE      700      D
600         EF      700      D
700         D       650      F
650         F       400      EF
400         EF      300      R
300         R       nan      nan


非常感谢您的帮助 !!

最佳答案

#creating two more columns: 'Max' and 'Attribute Max'
df['Max']=0
df['Attribute Max']=0
#running a for loop for finding rolling max and its attributes
for i in range(0,len(df)-1):
    df['Max'][i]=df['Value'][i+1:i+6].max()
# i+1 and i+6 are taken to consider from the next row till the next 5th row (6th row is excluded)
    df['Attribute Max'][i]=df['Attribute'][df['Value'][i+1:i+6].idxmax(axis=0)]
print(df)

关于python - 数据框:使用“vlookup”滚动窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53964725/

10-12 16:32