0

假设我有两张表,一张是关于带有字段的客户的元数据,另一张是customer_id从网站点击流事件中记录的带有字段的事件表customer_iddate. 显然,第二个表可能有几个非唯一事件(不幸的是,日期实际上只是一个日期而不是时间戳)。

尝试创建https://docs.featuretools.com/loading_data/using_entitysets.html时失败:

Index is not unique on dataframe (Entity transactions)

我怎样才能让它独一无二或让它发挥作用?

4

1 回答 1

1

如果您的表没有可用作唯一索引的列,您可以让功能工具自动创建一个。调用时EntitySet.entity_from_dataframe(...)只需将数据框中当前不存在的列名提供给index参数并设置make_index=True。这将自动创建一个具有唯一值的列。

例如,在下面的代码中,event_id索引是自动创建的

import pandas as pd
import featuretools as ft

df = pd.DataFrame({"customer_id": [0, 1, 0, 1, 1],
                   "date": [pd.Timestamp("1/1/2018"), pd.Timestamp("1/1/2018"),
                            pd.Timestamp("1/1/2018"), pd.Timestamp("1/2/2018"),
                            pd.Timestamp("1/2/2018")],
                   "event_type": ["view", "purchase", "view", "cancel", "purchase"]})

es = ft.EntitySet(id="customer_events")                
es.entity_from_dataframe(entity_id="events",
                         dataframe=df,
                         index="event_id",
                         make_index=True,
                         time_index="date")

print(es["events"])

在事件实体中,您可以看到 event_id 现在是一个变量,即使它不在原始数据框中

Entity: events
  Variables:
    event_id (dtype: index)
    date (dtype: datetime_time_index)
    customer_id (dtype: numeric)
    event_type (dtype: categorical)
  Shape:
    (Rows: 5, Columns: 4)
于 2018-09-23T17:44:10.813 回答