我正在为机器学习模型准备数据,该模型在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逻辑计算另一组列?