使用另一列的值获取熊猫均值

时间:2019-11-23 06:22:46

标签: python pandas numpy

我有一个非常简单的数据集,只有一个“价格”和“滚动”列。

           Price  Roll
209265  558180.0     8
209266  558195.0    16
209267  558185.0    18
209268  558120.0    11
209269  558075.0     6
209270  558160.0     6
209271  558140.0    17
209272  558085.0    17
209273  558110.0    14
209274  558160.0    16
209275  558210.0    19
209276  558185.0    11
209277  558180.0    12
209278  558150.0     8
209279  558135.0    15
209280  558135.0    17
209281  558295.0    10
209282  558375.0    18
209283  558520.0    15
209284  558515.0     7

我想做的是使用Roll的值并在滚动窗口中获取Price的均值。像这样:

df['Mean'] = df['Price'].rolling(df['Roll']).mean()

ValueError: window must be an integer

有没有一种快速的方法?

1 个答案:

答案 0 :(得分:0)

请注意,滚动需要一个恒定窗口大小,而您需要 为每行分别定义的窗口大小。

所以我认为唯一的选择就是这样:

定义一个计算滚动平均价格的函数:

def getRollPrice(i, roll):
    return df.Price.iloc[i : i + roll].mean()

参数:

  • i -整数行索引,
  • 此行的
  • roll - Roll 列。

然后通过以下方式调用此函数:

i = 0
rollPrice = []
for _, row in df.iterrows():
    rollPrice.append(getRollPrice(i, int(row.Roll)))
    i += 1
df = df.assign(RollPrice=rollPrice)

此构造至少包含以下优化:

  • 使用 iterrows 时,我们具有当前行,因此我们可以获取 此行中 Roll 的值。
  • 然后 getRollPrice 接收 Roll 作为参数及其唯一任务 是从 Price 列执行所需的切片,并计算 平均值