gpt4 book ai didi

python - 按事件进行时间序列标准化 - 通用版本

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:04 25 4
gpt4 key购买 nike

这个问题只是我已经发布的问题的通用版本,Time series normalization by event .

假设我有一个如下的Python字典,对于每个产品,键是时间戳,值是该时间戳的产品价格。

data_dict = {
'product_1' : {1: 415, 2: 550, 3: 0, 4: 550, 5: 600},
'product_2' : {1: 400, 2: 300, 3: 300, 4: 0, 5: 300},
'product_3' : {1: 500, 2: 0 , 3: 0, 4: 500, 5: 500},
'product_4' : {1: 0, 2: 200, 3: 200, 4: 300, 5: 300}
}

在时间序列分析中,通过某个事件重新规范化许多时间序列是很常见的,假设我们将该事件视为产品免费时的时间戳。在通用版本中,我允许该产品免费多日。我想要一张具有这种结构的表格。

           | -3  | -2  | -1  | 0 | +1  | +2  | +3  | +4  |
---------------------------------------------------------
product_1 | NA | 415 | 550 | 0 | 550 | 600 | NA | NA |
product_2 | 400 | 300 | 300 | 0 | 300 | NA | NA | NA |
product_3 | NA | NA | 500 | 0 | 500 | 500 | NA | NA |
product_4 | NA | NA | NA | 0 | 200 | 200 | 300 | 300 |

有没有办法使用 python 的 pandas 轻松地做到这一点?我确信很多数据科学人员在某个时候都不得不做类似的事情。如果没有,如果 Pandas 人将来可以为类似的事情添加一些功能,我将非常感激!与此同时,有什么建议如何解决这个问题吗?

最佳答案

仅以此处限制案例的答案为基础:https://stackoverflow.com/a/33723633/1853020

我修改了函数以引入左右限制:

def sync(arr):
shift_l = np.where(arr.values == 0)[0][0]
shift_r = np.where(arr.values == 0)[0][-1]
if shift_l == shift_r:
return pd.Series(arr.values, np.arange(-shift_l , len(arr.values) - shift_l))
else:
arr2 = np.delete(arr.values, [x for x in range(shift_l, shift_r)])
return pd.Series(arr2, np.arange(-shift_l, len(arr2) - shift_l))

然后将其应用于根据 data_dict 创建的 pandas 数据框:

pd.DataFrame(data_dict).apply(sync).T

-3 -2 -1 0 1 2 3 4
product_1 NaN 415 550 0 550 600 NaN NaN
product_2 400 300 300 0 300 NaN NaN NaN
product_3 NaN NaN 500 0 500 500 NaN NaN
product_4 NaN NaN NaN 0 200 200 300 300

关于python - 按事件进行时间序列标准化 - 通用版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33724667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com