Применить скользящую функцию с несколькими аргументами в DataFrame - PullRequest
0 голосов
/ 03 июня 2019

Допустим, у меня есть следующий фрейм данных:

df = pd.DataFrame({"quantity": [101, 102, 103], "price":[12, 33, 44]})

    price   quantity
0   12      101
1   33      102
2   44      103

Я изо всех сил пытался найти, как применить к нему функцию скользящего комплекса.

Для простоты, давайте предположим, что эта функция f это просто произведение quantity и price.В этом случае, как применить эту функцию к скользящему окну размером 1 с параметром масштабирования, скажем:

scaling = 10

, так что результирующий кадр данных будет:

    price   quantity    value
0   12      101         NaN
1   33      102         12120.0
2   44      103         33660.0

с value[i] = price[i-1]*quantity[i-1]*scaling

Я пробовал:

def f(x,scaling):
    return x['quantity']*x['price']*scaling
df.rolling(window=1).apply(lambda x: f(x,scaling))

и

def f(quantity,price,scaling):
    return quantity*price*scaling
df.rolling(window=1).apply(lambda x: f(x['quantity'],x['price'],scaling))

Не могли бы вы помочь мне исправить это без выполнения простой:

df['value'] = df['quantity'].shift(1)*df['price'].shift(1)*scaling 

?

1 Ответ

1 голос
/ 03 июня 2019

Если предположить, что вы действительно хотите value[i] = price[i-1] * quantity[i-1] * scaling, то:

scaling = 10
df['value'] = df.shift(1).apply(lambda x: x['quantity'] * x['price'] * scaling, axis=1)

df

    quantity    price   value
0   101         12      NaN
1   102         33      12120.0
2   103         44      33660.0
...