如何使用基于滚动自定义函数的Pandas向量方法,该函数涉及整个行和先验数据

问题描述 投票:1回答:1

虽然它易于使用的熊猫滚动方法可以应用标准公式,但是如果涉及多列且行数有限,我很难。使用以下代码更好地进行详细说明:-

import numpy as np
import pandas as pd

#create dummy pandas
df=pd.DataFrame({'col1':np.arange(0,25),'col2':np.arange(100,125),'col3':np.nan})

def func1(shortdf):
    #dummy formula 
    #use last row of col1 multiply by sum of col2
    return (shortdf.col1.tail(1).values[0]+shortdf.col2.sum())*3.14

for idx, i in df.iterrows():
    if idx>3:
        #only interested in the last 3 rows from position of dataframe
        df.loc[idx,'col3']=func1(df.iloc[idx-3:idx])

我目前正在使用这种iterrow方法,这是非常缓慢的。谁能提供更好的建议?

pandas
1个回答
0
投票

所以shift是这里的解决方案。您必须使用滚动进行求和,然后在加法和乘法之前移动该序列。

df = pd.DataFrame({'col1':np.arange(0,25),'col2':np.arange(100,125),'col3':np.nan})

ans = ((df['col1'] + df['col2'].rolling(3).sum().shift(0)) * 3.14).shift(1)

您可以通过使用ans查看df['col3']ans.eq(df['col3'])相同。一旦看到除了前几个以外的所有其他字符都一样,只需将ans更改为df['col3'],就应该全部设置好了。

© www.soinside.com 2019 - 2024. All rights reserved.