我尝试在 featuretool 的 dfs 函数中添加一个 cutoff_time 数据帧,以便我的数据帧中的每一行都有一个特定的截止时间。但我无法使 cutoff_time 数据帧按预期工作文档说cutoff_time的第一列应该是'instance_id'。我不确定这意味着什么..我尝试了目标实体(交易)的索引和目标实体(交易)的customer_id(id) . 他们俩都会弄乱feature_matrixmerkle_fake = pd.DataFrame()transaction_fake['order_date'] = ['2019-01-01','2018-01-01','2017-01-01','2018-05-23','2019-02-02','2018-12-21']transaction_fake['product_category'] = ['cat2','cat3','cat2','cat1','cat2','cat2']transaction_fake['id'] = ['1','2','1','3','1','2']transaction_fake['order_date'] = pd.to_datetime(transaction_fake['order_date'])transaction_fake['index'] = transaction_fake.index.tolist()merkle_fake['cust_id'] = ['1','2','3']es_demo = ft.EntitySet(id = 'demo')es_demo.entity_from_dataframe(entity_id='transaction', dataframe= transaction_fake,time_index = 'order_date',index = 'index')es_demo.entity_from_dataframe(entity_id='merkle', dataframe= merkle_fake,index = 'cust_id')relationship_fake = ft.Relationship(es_demo["merkle"]["cust_id"],es_demo["transaction"]["id"])es_demo = es_demo.add_relationship(relationship_fake)cutoff_times_demo = pd.DataFrame()cutoff_times_demo['instance_id'] = es_demo['transaction'].df['id']cutoff_times_demo['time'] = es_demo['transaction'].df['order_date']feature_matrix_demo, feature_defs_demo = ft.dfs(entityset=es_demo, agg_primitives=['count'], trans_primitives=[], target_entity='transaction', cutoff_time= cutoff_times_demo, features_only = False)feature_matrix_demo 我希望输出会是这样的: product_category id merkle.COUNT(transaction)2 cat2 1 11 cat3 2 13 cat1 3 15 cat2 2 20 cat2 1 24 cat2 1 3
1 回答
Qyouu
TA贡献1786条经验 获得超11个赞
当您为 cutoff_time 传入具有“instance_id”和“时间”列的 DataFrame 时,dfs 将计算由其“instance_id”标识的每个实例,直至并包括相应的“时间”。“instance_id”标识目标实体中的行。
因此,当您传入es_demo['transaction'].df['id']for时cutoff_times_demo['instance_id'],您会告诉dfs()在 '2017-01-01' 处计算第 1 行,在 '2018-01-01' 处计算第 2 行,在 '2018-05-23' 处计算第 3 行,在 '2018-05-23' 处计算第 2 行2018-12-21' 等。这会为返回的 feature_matrix 中的第一行生成 NaN 值,因为在 2017-01-01 之前和之前的第 1 行没有数据。
要获得您期望的输出,请将您设置的 instance_id 列更改为:
cutoff_times_demo['instance_id'] = es_demo['transaction'].df['index']
添加回答
举报
0/150
提交
取消
