我有一个数据框架,其中包含有关会员,报价,点击次数等的数据。我想计算昨天和今天每个报价+会员之间的转化差异(列名«Appr»)。
D;H;AfID;Affil_name;M;OfID;Offer_name;Clicks;Revenue;Earnings;Appr;Decl;CR;Tr-back
28;11;10;elephant;Ella;1132;App_Aweepstakes;2100;0;0;100;0;1:10;1
28;11;1828;a.kalen;Ella;2675;Cash App_Sweepstakes/CPA_US;3;0;0;200;0;1:50;0
29;11;1828;a.kalen;Ella;2675;Cash App_Sweepstakes/CPA_US;11;0;0;350;0;1:50;0
为此,我使用groupby和diff():
final_df[´DifAppr’] = final_df.groupby(['H', 'AfID', 'Affil_name', 'M', 'OfID','Offer_name'])[´Appr’].diff().fillna(0)
但是,如果该报价+会员的前一天数据框中没有数据,则此行将被忽略并且不会被计算:
D;H;AfID;Affil_name;M;OfID;Offer_name;Clicks;Revenue;Earnings;Appr;Decl;CR;Tr-back, DiffAppr
29;11;1828;a.kalen;Ella;2675;Cash App_Sweepstakes/CPA_US;11;0;0;350;0;1:50;0;150
在这种情况下,我希望此行保持不变。也就是说,前一天的转换为0,而对于今天和昨天之间的转换差异,则显示今天的数据。也就是说,对于该会员,昨天的转化次数为0,而该行不在数据框中,因此今天的转化次数为68。在这种情况下,“ DiffAppr”列应为68。
答案 0 :(得分:0)
如果同一组中有两个以上的组,我没有尝试过,但是如果分组数为1,则我什么也不做;如果有两个以上,则执行diff()
。
final_df['DifAppr'] = (final_df.groupby(['H', 'AfID', 'Affil_name', 'M', 'OfID','Offer_name'])['Appr']
.apply(lambda x: x.diff() if len(x) >= 2 else x)).fillna(0)
final_df
D H AfID Affil_name M OfID Offer_name Clicks Revenue Earnings Appr Decl CR Tr-back DifAppr
0 28 11 10 elephant Ella 1132 App_Aweepstakes 2100 0 0 100 0 1:10 1 100.0
1 28 11 1828 a.kalen Ella 2675 Cash App_Sweepstakes/CPA_US 3 0 0 200 0 1:50 0 0.0
2 29 11 1828 a.kalen Ella 2675 Cash App_Sweepstakes/CPA_US 11 0 0 350 0 1:50 0 150.0