根据另一列中的前几行数据计算 pandas 中的列值

Calculate column values in pandas based on previous rows of data in another column

假设我有一个包含两列的 table:日期和金额。行数不超过3000

行日期金额

1 2021 年 5 月 15 日 248

2 2021 年 5 月 16 日 115

3 2021 年 5 月 17 日 387

4 18/05/2021 214

5 19/05/2021 678

6 20/05/2021 489

7 21/05/2021 875

8 22/05/2021 123

................

我需要添加第三列,它将根据金额列计算 trim 平均值。

我将使用此函数:my_table['TrimMean'] = stats.trim_mean(my_table['Amount'], 0.1),但适用于我的问题。

问题是这不是一个固定范围,而是一个动态范围,遵循以下逻辑:对于我的 table 中的每一行,trim 平均值将根据Amount 列的前 90 个值,从当前行上方的行开始。如果少于 90 个值,则使用可用的行数进行计算。

例如TrimMean[1000]=stats.trim_mean(包含第 910 行到 999 行值的列 Amount 的数组)TrimMean[12]=stats.trim_mean(包含第 1 行到 11 行的值的列 Amount 的数组)

希望这是有道理的。

有没有什么方法可以用简单的方式计算这个,而不需要逐行迭代?

我们可以通过将函数应用于大小为 90min_periods=1

rolling window 来计算 trim_mean
from scipy.stats import trim_mean

df['Amount'].rolling(90, min_periods=1).apply(trim_mean, args=(0.1, )).shift()

0           NaN
1    248.000000
2    181.500000
3    250.000000
4    241.000000
5    328.400000
6    355.166667
7    429.428571
Name: Amount, dtype: float64