我正在尝试使用featuretools来计算时间序列函数。具体来说,我想用组键(user_id)从前面的(x)中减去当前(x),但在entityset中添加这种关系时遇到了麻烦
df = pd.DataFrame({
"user_id": [i % 2 for i in range(0, 6)],
'x': range(0, 6),
'time': pd.to_datetime(['2014-1-1 04:00', '2014-1-1 05:00',
'2014-1-1 06:00', '2014-1-1 08:00', '2014-1-1 10:00', '2014-1-1 12:00'])
})
print(df.to_string())
user_id x time
0 0 0 2014-01-01 04:00:00
1 1 1 2014-01-01 05:00:00
2 0 2 2014-01-01 06:00:00
3 1 3 2014-01-01 08:00:00
4 0 4 2014-01-01 10:00:00
5 1 5 2014-01-01 12:00:00
es = ft.EntitySet(id='test')
es.entity_from_dataframe(entity_id='data', dataframe=df,
variable_types={
'user_id': ft.variable_types.Categorical,
'x': ft.variable_types.Numeric,
'time': ft.variable_types.Datetime
},
make_index=True, index='index',
time_index='time'
)
然后我尝试调用dfs,但我无法正确处理关系
fm, fl = ft.dfs(
target_entity="data",
entityset=es,
trans_primitives=["diff"]
)
print(fm.to_string())
user_id x DIFF(x)
index
0 0 0 NaN
1 1 1 1.0
2 0 2 1.0
3 1 3 1.0
4 0 4 1.0
5 1 5 1.0
但我真正想得到的是用户之间的差异。即,从每个用户的最后一个值开始:
user_id x DIFF(x)
index
0 0 0 NaN
1 1 1 NaN
2 0 2 2.0
3 1 3 2.0
4 0 4 2.0
5 1 5 2.0
如何在featuretools中获得这种关系?我试过几个教程,但都没用。我被难住了
谢谢
谢谢你的提问。通过为用户规范化实体并应用group by transform原语,可以获得预期的输出。我将使用这些数据快速浏览一个示例
首先,创建实体集并为用户规范化实体
然后,在DFS中应用group by transform原语
您应该按用户获得差异
相关问题 更多 >
编程相关推荐