如何为Pandas DataFrame中condition为True的value计算半衰期5分钟的EWMA
基于Condition为True的指数加权移动平均(EWMA)计算
实现步骤
我们需要仅针对condition列值为True的行,计算value列的指数加权移动平均(半衰期5分钟),并将结果映射回原DataFrame的新列中。
完整代码
import pandas as pd # 构建原始DataFrame df = pd.DataFrame({ 'year': [2016]*10, 'month': [1]*10, 'day' : [1]*10, 'hour': [10]*10, 'minute': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}) df.index = pd.to_datetime(df) df['condition'] = [True, False, True, False, False, False, False, False, False, True] df['value'] = [1,2,3,4,5,6,7,8,9,10] df = df[['condition', 'value']] # 计算仅condition为True时的EWMA # 筛选符合条件的value true_subset = df[df['condition']]['value'] # 计算EWMA,halflife设为5分钟,adjust=False使用递归计算逻辑 ewma_result = true_subset.ewm(halflife='5min', adjust=False).mean() # 将结果合并回原DataFrame df['ewma_value'] = ewma_result
结果说明
执行后,df的ewma_value列仅在condition为True的行有值,其余行显示NaN,核心结果示例:
| condition | value | ewma_value | |
|---|---|---|---|
| 2016-01-01 10:01:00 | True | 1 | 1.000000 |
| 2016-01-01 10:03:00 | True | 3 | 1.777156 |
| 2016-01-01 10:10:00 | True | 10 | 6.496855 |
关键参数解释
halflife='5min':指定半衰期为5分钟,因DataFrame索引为datetime类型,Pandas会自动根据时间间隔计算权重衰减。adjust=False:采用递归式EWMA计算(EWMA_t = α*value_t + (1-α)*EWMA_{t-1}),更贴合实时更新场景;若设为True则使用加权平均式计算。
内容的提问来源于stack exchange,提问作者jds
相关产品推荐
相关产品推荐

