【问题标题】:Calculate difference between rows in Pandas dataframe计算 Pandas 数据框中行之间的差异
【发布时间】:2021-01-14 11:57:03
【问题描述】:

我有一个包含关联公司、优惠、点击等数据的数据框。我想计算每个优惠 + 关联公司在昨天和今天之间的转化率差异(列名«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。

【问题讨论】:

  • 欢迎来到 SO!请编辑您的问题以发布可重现的数据示例(在您的问题中发布实际数据,切勿将数据发布为图像或链接到图像)。请编辑您的描述以使其更清晰并具有更好的格式。然后人们可能会投票重新开放它。

标签: python pandas dataframe


【解决方案1】:

如果同一个组有两个以上的组我没试过,但是如果分组数为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

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 2019-09-02
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2021-10-06
    • 2022-08-06
    相关资源
    最近更新 更多