根据另一列中的前几行数据计算 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 的数组)
希望这是有道理的。
有没有什么方法可以用简单的方式计算这个,而不需要逐行迭代?
我们可以通过将函数应用于大小为 90
和 min_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
假设我有一个包含两列的 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 的数组)
希望这是有道理的。
有没有什么方法可以用简单的方式计算这个,而不需要逐行迭代?
我们可以通过将函数应用于大小为 90
和 min_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