如何使用pandas为机器学习模型创建“动态”功能?

时间:2016-01-11 17:21:37

标签: python pandas machine-learning feature-extraction

我正在为机器学习模型准备数据,该模型在CID,transaction_dt级别进行预测(目标变量未在下面显示)。

我想创建一个功能,在每个CID,transaction_dt组合的特定transaction_dt之前,为每个CID创建一个销售总额(我称之为动态,因为它会针对每个CID,transaction_dt进行更改)。

同样,我想为Credit_flag创建一个二进制功能,它告诉我CID在交易日期之前的任何时间是否使用过信用卡。

输入

CID transaction_dt  sales   Credit_flag
1000    01-09-15    460         1
1000    01-31-2015  300         0
1000    01-03-15    400         1
1000    01-12-15    240         1
2001    02-06-15    389         1
2001    01-03-15    429         0
2001    04-30-2015  491         0
2001    01-09-15    148  `      1

所需输出

注意:pre_sales = transaction_dt

之前的CID的销售总额
CID transaction_dt  pre_sales   pre_Credit_flag
1000    01-09-15    400             1
1000    01-31-2015  1100            1
1000    01-03-15    0               0
1000    01-12-15    860             1
2001    02-06-15    577             1
2001    01-03-15    0               0
2001    04-30-2015  966             1
2001    01-09-15    429             0

如何使用熊猫优雅地做到这一点? 我尝试创建一个如下所示的函数,但它不会工作。

def dynamic_var(cid, trans_dt):
    x_data1_dyna=x_data1_dedup[(x_data1_dedup['transaction_dt']<trans_dt) & (x_data1_dedup['cid']==cid)].groupby(['cid','transaction_dt'])\
    .agg({'sales':'sum','credit_flaf':'max'}).reset_index()

    return x_data1_dyna


pd.concat(x_data1_dedup.apply(lambda x: dynamic_car(x['cid'], x['transaction_dt']),axis=1),axis=1)

修改

我正在寻找一种通用的方法,即使我有100列而不是这里给出的两列,它也可以工作。我想应用不同的聚合逻辑,比如几列的中位数,另一组列的最大值,根据上面讨论的相同的transaction_dt逻辑计算另一组列?

0 个答案:

没有答案