Это можно сделать, назначив второй столбец времени как DatetimeTimeIndex
. Вот пример использования демонстрационного набора данных.
import featuretools as ft
df = ft.demo.load_mock_customer(return_single_table=True)
df = df.filter(regex='amount|customer|time')
Я создаю второй столбец времени.
df['transaction_time_2'] = df['transaction_time']
df.head()
transaction_time amount customer_id transaction_time_2
0 2014-01-01 00:00:00 127.64 2 2014-01-01 00:00:00
1 2014-01-01 00:09:45 57.39 2 2014-01-01 00:09:45
2 2014-01-01 00:14:05 69.45 2 2014-01-01 00:14:05
3 2014-01-01 02:33:50 123.19 2 2014-01-01 02:33:50
4 2014-01-01 02:37:05 64.47 2 2014-01-01 02:37:05
Затем я создаю набор сущностей. Я использую параметр variable_types
, чтобы установить свой второй временной столбец как тип переменной DatetimeTimeIndex
.
es = ft.EntitySet()
es.entity_from_dataframe(
'transactions',
df,
time_index='transaction_time',
index='id',
make_index=True,
variable_types={
'transaction_time_2': ft.variable_types.DatetimeTimeIndex,
}
)
es.normalize_entity('transactions', 'customers', index='customer_id')
Наконец, я вычисляю матрицу объектов. Мы можем видеть, что основанные на времени примитивы были применены к обоим временным столбцам.
fm, fd = ft.dfs(
target_entity='customers',
entityset=es,
agg_primitives=[
"time_since_first",
"time_since_last",
"avg_time_between",
"trend",
],
trans_primitives=[],
)
print(fm.iloc[0].to_string())
TIME_SINCE_FIRST(transactions.transaction_time) 1.822703e+08
TIME_SINCE_FIRST(transactions.transaction_time_2) 1.822703e+08
TIME_SINCE_LAST(transactions.transaction_time) 1.822401e+08
TIME_SINCE_LAST(transactions.transaction_time_2) 1.822401e+08
AVG_TIME_BETWEEN(transactions.transaction_time) 3.285326e+02
AVG_TIME_BETWEEN(transactions.transaction_time_2) 3.285326e+02
TREND(transactions.amount, transaction_time) -5.251887e+01
TREND(transactions.amount, transaction_time_2) -5.251887e+01
Дайте мне знать, если это поможет.