【发布时间】:2021-09-18 15:03:45
【问题描述】:
使用 Featuretools,我想将某个特征的值转换为排名。
这将是确切的问题。如果有人可以帮助我,请回答。
首先,下面的代码使用pandas的rank函数并显示结果。我相信这个结果是正确的。
import pandas as pd
df = pd.DataFrame({'col1': [50, 80, 100, 80,90,100,150],
'col2': [0.3, 0.05, 0.1, 0.1,0.4,0.7,0.9]})
print(df.rank(method="dense",ascending=True))
但是,当我创建自定义原语并运行以下代码时,结果会有所不同。为什么会这样?如果我的代码有误,请修复我的代码。非常感谢您的帮助。
from featuretools.primitives import TransformPrimitive
from featuretools.variable_types import Numeric
import pandas as pd
class Rank(TransformPrimitive):
name = 'rank'
input_types = [Numeric]
return_type = Numeric
def get_function(self):
def rank(column):
return column.rank(method="dense",ascending=True)
return rank
df = pd.DataFrame({'col1': [50, 80, 100, 80,90,100,150],
'col2': [0.3, 0.05, 0.1, 0.1,0.4,0.7,0.9]})
import featuretools as ft
es = ft.EntitySet(id="test_es",
entities=None,
relationships=None)
es.entity_from_dataframe(entity_id="data",
dataframe=df,
index="index",
variable_types=None,
make_index=True,
time_index=None,
secondary_time_index=None,
already_sorted=False)
feature_matrix, feature_defs = ft.dfs(entities=None,
relationships=None,
entityset=es,
target_entity="data",
cutoff_time=None,
instance_ids=None,
agg_primitives=None,
trans_primitives=[Rank],
groupby_trans_primitives=None,
allowed_paths=None,
max_depth=2,
ignore_entities=None,
ignore_variables=None,
primitive_options=None,
seed_features=None,
drop_contains=None,
drop_exact=None,
where_primitives=None,
max_features=-1,
cutoff_time_in_index=False,
save_progress=None,
features_only=False,
training_window=None,
approximate=None,
chunk_size=None,
n_jobs=-1,
dask_kwargs=None,
verbose=False,
return_variable_types=None,
progress_callback=None,
include_cutoff_time=False)
feature_matrix
这是结果。
但是,当我尝试以下代码时,我能够获得正确的数据。 为什么答案不同?
import pandas as pd
df = pd.DataFrame({'col1': [50, 80, 100, 80,90,100,150],
'col2': [0.3, 0.05, 0.1, 0.1,0.4,0.7,0.9]})
print(df.rank(method="dense",ascending=True))
pd.set_option('display.max_columns', 2000)
import featuretools as ft
es = ft.EntitySet()
es.entity_from_dataframe(entity_id='data',
dataframe=df,
index='index')
fm, fd = ft.dfs(entityset=es,
target_entity='data',
trans_primitives=[Rank])
fm
【问题讨论】:
标签: python featuretools