【问题标题】:Calculate column values in pandas based on previous rows of data in another column根据另一列中先前的数据行计算 pandas 中的列值
【发布时间】:2021-11-07 12:17:51
【问题描述】:

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

行日期金额

1 15/05/2021 248

2 16/05/2021 115

3 17/05/2021 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

.......

我需要添加第三列,它将根据 Amount 列计算修剪平均值。

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

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

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

希望这是有道理的。

有没有什么方法可以简单地计算出来,而不需要逐行迭代?

【问题讨论】:

    标签: python pandas calculated-columns calculation


    【解决方案1】:

    我们可以通过在大小为90min_periods=1rolling 窗口上应用函数来计算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
    

    【讨论】:

    • 在尝试用 Python 实现它之前,我使用的是 Excel。不确定您是否可以尝试,但您是否得到相同的值 Excel 与 python 计算?对于我使用的数据,结果似乎有所不同(相差不大,差距很小)
    • @George 不幸的是,我无法使用 excel 进行检查。你能量化小边距吗?
    • 我现在正在尝试看看如果Excel公式与python相同,是否可以找到一些信息。调试会有所帮助,但我不能将它应用于这样的封装公式,或者我不知道如何......我会让你知道结果。谢谢你的帮助,你的回答很有帮助。
    • 好的,所以Excel参数包括上下百分比范围,所以python中的0.1相当于Excel中的0.2。您的解决方案效果很好。非常感谢!
    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2022-12-18
    • 2022-01-09
    相关资源
    最近更新 更多