计算熊猫数据框中行之间的差异

时间:2020-09-28 21:41:53

标签: python pandas dataframe

我有一个数据框架,其中包含有关会员,报价,点击次数等的数据。我想计算昨天和今天每个报价+会员之间的转化差异(列名«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。

1 个答案:

答案 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