假设我有一个如下的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: 400, 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 | 500 | 400 | 0 | 500 | 500 | NA | NA |
product_4 | NA | NA | NA | 0 | 200 | 200 | 300 | 300 |
有没有办法使用 python 的 pandas 轻松地做到这一点?我确信很多数据科学人员在某个时候都不得不做类似的事情。如果没有,如果 Pandas 人将来可以为类似的事情添加一些功能,我将非常感激!与此同时,有什么建议如何解决这个问题吗?
最佳答案
您可以使用.apply
方法,但如果您有很多列,那么效率往往会很低;
所以从这个框架开始:
>>> df
product_1 product_2 product_3 product_4
1 415 400 500 0
2 550 300 400 200
3 0 300 0 200
4 550 0 500 300
5 600 300 500 300
您定义一个同步函数,如下所示:
>>> def sync(ts):
... vals = ts.values
... n, k = len(vals), np.where(vals == 0)[0][0]
... return Series(vals, np.arange(-k, n - k))
并按列应用它:
>>> df.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 500 400 0 500 500 NaN NaN
product_4 NaN NaN NaN 0 200 200 300 300
.T
位于末尾用于转置。
关于python - 按事件标准化时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33723459/