You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas DataFrame两种衰减计算实现及ewm函数应用咨询

Pandas衰减值计算实现方案

结论先行

  • 版本1的递推式衰减可以通过pandas的ewm函数实现,也可以用更直观的自定义分组递推实现
  • 版本2的公式化衰减不需要用到ewm,直接向量化计算即可

前置准备

首先保证数据按用户、日期升序排序,确保时序计算逻辑正确:

import pandas as pd
import numpy as np

df = df.sort_values(['user', 'day']).reset_index(drop=True)

版本1衰减实现

你给出的递推规则为 decay_v1 = 当前value + 前序衰减值 * 0.1,两种实现方式可选:

方式1:ewm实现

对应ewm参数设置adjust=False,alpha取0.9即可匹配递推规则:

df['decay_v1'] = df.groupby('user')['value']\
                   .transform(lambda x: x.ewm(alpha=0.9, adjust=False).mean() / 0.9)

方式2:自定义递推(更易理解、方便调整规则)

def calc_decay_v1(group):
    res = []
    prev_decay = 0
    for val in group['value']:
        curr_decay = val + prev_decay * 0.1
        res.append(curr_decay)
        prev_decay = curr_decay
    group['decay_v1'] = res
    return group

df = df.groupby('user', group_keys=False).apply(calc_decay_v1)

版本2衰减实现

按你给出的公式直接计算即可,步骤如下:

sat = 0.05
# 提取每个用户2021-03-01的value_cumulative作为基准center
user_center_map = df[df['day'] == '2021-03-01'].set_index('user')['value_cumulative'].to_dict()
df['center'] = df['user'].map(user_center_map)

# 计算参数x,加极小值避免除0报错
df['x'] = -np.log(1 - sat) / (df['center'] + 1e-9)
# 计算最终衰减值
df['decay_v2'] = 1 - np.exp(-df['x'] * df['value_cumulative'])

# 可选:删除中间计算列
df = df.drop(columns=['center', 'x'])

内容的提问来源于stack exchange,提问作者Manuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 14:06:03