说我有这个简单的代码段。我将对数据框进行分组,聚合和合并:
df = pd.DataFrame({'A': [1, 1, 2, 2],
'B': [1, 2, 3, 4],
'C': [0.3, 0.2, 1.2, -0.5]})
df:
A B C
0 1 1 0.3
1 1 2 0.2
2 2 3 1.2
3 2 4 -0.5
df_result = df.groupby('A').agg('min')
df_result.columns = ['groupby_A(min_'+x+')' for x in df_result.columns]
df_result:
groupby_A(min_B) groupby_A(min_C)
A
1 1 0.2
2 3 -0.5
df_new = pd.merge(df,df_result,on='A')
df_new
df_new:
A B C groupby_A(min_B) groupby_A(min_C)
0 1 1 0.3 1 0.2
1 1 2 0.2 1 0.2
2 2 3 1.2 3 -0.5
3 2 4 -0.5 3 -0.5
# ---- Import the Module ----
import featuretools as ft
# ---- Make the Entity Set (the set of all tables) ----
es = ft.EntitySet()
# ---- Make the Entity (the table) ----
es.entity_from_dataframe(entity_id = 'df',
dataframe = df)
# ---- Do the Deep Feature Synthesis (group, aggregate, and merge the features) ----
feature_matrix, feature_names = ft.dfs(entityset = es,
target_entity = 'df',
trans_primitives = ['cum_min'])
feature_matrix
feature_matrix:
A B C CUM_MIN(A) CUM_MIN(B) CUM_MIN(C)
index
0 1 1 0.3 1 1 0.3
1 1 2 0.2 1 1 0.2
2 2 3 1.2 1 1 0.2
3 2 4 -0.5 1 1 -0.5
使用Pandas进行的操作如何转换为功能工具(最好不添加其他表)?
我尝试使用featuretools不能给出正确的输出,但是我相信我使用的过程有些正确。
答案 0 :(得分:0)
在Featuretools中推荐使用此方法。您确实需要创建另一个表以使其完全按照您的要求工作。
import featuretools as ft
import pandas as pd
df = pd.DataFrame({'A': [1, 1, 2, 2],
'B': [1, 2, 3, 4],
'C': [0.3, 0.2, 1.2, -0.5]})
es = ft.EntitySet()
es.entity_from_dataframe(entity_id="example",
index="id",
make_index=True,
dataframe=df)
es.normalize_entity(new_entity_id="a_entity",
base_entity_id="example",
index="A")
fm, fl = ft.dfs(target_entity="example",
entityset=es,
agg_primitives=["min"])
fm
这将返回
A B C a_entity.MIN(example.B) a_entity.MIN(example.C)
id
0 1 1 0.3 1 0.2
1 1 2 0.2 1 0.2
2 2 3 1.2 3 -0.5
3 2 4 -0.5 3 -0.5
如果您不想创建额外的表,则可以尝试使用cum_min
原语,该原语在按A
分组后计算累积量
df = pd.DataFrame({'A': [1, 1, 2, 2],
'B': [1, 2, 3, 4],
'C': [0.3, 0.2, 1.2, -0.5]})
es = ft.EntitySet()
es.entity_from_dataframe(entity_id="example",
index="id",
make_index=True,
variable_types={
"A": ft.variable_types.Id
},
dataframe=df,)
fm, fl = ft.dfs(target_entity="example",
entityset=es,
groupby_trans_primitives=["cum_min"])
fm
这将返回
B C A CUM_MIN(C) by A CUM_MIN(B) by A
id
0 1 0.3 1 0.3 1.0
1 2 0.2 1 0.2 1.0
2 3 1.2 2 1.2 3.0
3 4 -0.5 2 -0.5 3.0