Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 功能工具截止时间无法正常工作_Python_Featuretools - Fatal编程技术网

Python 功能工具截止时间无法正常工作

Python 功能工具截止时间无法正常工作,python,featuretools,Python,Featuretools,我尝试向featuretool的dfs函数添加截止时间数据框,以便数据框中的每一行都有一个特定的截止时间。但我无法使截止时间数据框按预期工作 文档中说,截止时间的第一列应该是“实例id”。我不确定这是什么意思。我尝试了目标实体(事务)的索引和目标实体(事务)的客户id(id)。它们都会弄乱特征矩阵 merkle_fake = pd.DataFrame() transaction_fake['order_date'] = ['2019-01-01','2018-01-01','2017-01-0

我尝试向featuretool的dfs函数添加截止时间数据框,以便数据框中的每一行都有一个特定的截止时间。但我无法使截止时间数据框按预期工作

文档中说,截止时间的第一列应该是“实例id”。我不确定这是什么意思。我尝试了目标实体(事务)的索引和目标实体(事务)的客户id(id)。它们都会弄乱特征矩阵

merkle_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   1
1   cat3    2   1
3   cat1    3   1
5   cat2    2   2
0   cat2    1   2
4   cat2    1   3

但它给了我:

    product_category    id  merkle.COUNT(transaction)
index           
1   NaN NaN 0
2   cat2    1   1
3   cat1    3   1
2   cat2    1   1
1   cat3    2   2
1   cat3    2   2

当您传入一个带有“instance_id”和“time”列的数据帧作为截止时间时,dfs将计算每个由其“instance_id”标识的实例,直到并包括相应的“time”。“instance_id”标识目标实体中的行

因此,当您将
es\u demo['transaction'].df['id']
传递给
cutoff\u times\u demo['instance\u id']
时,您告诉
dfs()
计算“2017-01-01”的第1行、“2018-01-01”的第2行、“2018-05-23”的第3行、“2018-12-21”的第2行,等等。这将为返回的特征矩阵中的第一行生成NaN值,因为2017-01-01之前和之前没有第1行的数据

要获得预期的输出,请更改您将instance_id列设置为的内容:


cutoff\u times\u demo['instance\u id']=es\u demo['transaction'].df['index']

当您传入一个带有'instance\u id'和'time'列的数据帧作为cutoff\u time时,dfs将计算每个由其'instance\u id'标识的实例,直到并包括相应的'time'。“instance_id”标识目标实体中的行

因此,当您将
es\u demo['transaction'].df['id']
传递给
cutoff\u times\u demo['instance\u id']
时,您告诉
dfs()
计算“2017-01-01”的第1行、“2018-01-01”的第2行、“2018-05-23”的第3行、“2018-12-21”的第2行,等等。这将为返回的特征矩阵中的第一行生成NaN值,因为2017-01-01之前和之前没有第1行的数据

要获得预期的输出,请更改您将instance_id列设置为的内容:

cutoff\u times\u demo['instance\u id']=es\u demo['transaction'].df['index']