删除另一列中具有转换值后日期的行以创建归因链

Posted

技术标签:

【中文标题】删除另一列中具有转换值后日期的行以创建归因链【英文标题】:Delete rows with dates after conversion value in another column for making attribution chains 【发布时间】:2020-07-28 13:52:15 【问题描述】:

我有一个如下所示的 pd.dataframe:

cookie     date           channel       goal_reached
cookie_1   2020-01-12     paid          0
cookie_1   2020-02-17     organic       0
cookie_1   2020-04-02     referral      1
cookie_1   2020-05-13     direct        0
cookie_1   2020-05-16     direct        0
cookie_2   2020-01-18     referral      0
cookie_2   2020-03-13     paid          1
cookie_2   2020-04-01     organic       0
cookie_2   2020-05-16     organic       0
cookie_2   2020-05-22     paid          0
cookie_3   2020-01-13     direct        0
cookie_3   2020-04-14     organic       0
cookie_3   2020-06-10     organic       0

我想对每个 cookie 值进行分组,并删除目标到达值为 1 的日期之后的所有行。如果 cookie 没有目标达到值 1,我需要获取所有行。

我想要这样的最终输出:

cookie     channel                         goal_reached
cookie_1   paid > organic > referral       1
cookie_2   referral > paid                 1
cookie_3   direct > organic > organic      0

我有以下代码,但它可以按所有行分组:

df = df.sort_values(['cookie', 'date'],
                    ascending=[False, True])
df = df.groupby('cookie', as_index=False).agg('channel': lambda x: "%s" % ' > '.join(x), 'reg_goal': 'max')

【问题讨论】:

【参考方案1】:

你可以试试这个:

df = df[df.groupby('cookie')['goal_reached'].transform(lambda x: x.cumsum().cumsum()).lt(2)]
df = df.groupby('cookie').agg('channel': lambda x: ' > '.join(x), 'goal_reached': 'max')
print(df)

                             channel  goal_reached
cookie                                            
cookie_1   paid > organic > referral             1
cookie_2             referral > paid             1
cookie_3  direct > organic > organic             0

【讨论】:

我不明白怎么做,但效果很好,非常感谢!))) 如果它解决了您的问题,请接受答案。谢谢!

以上是关于删除另一列中具有转换值后日期的行以创建归因链的主要内容,如果未能解决你的问题,请参考以下文章

从数据框中删除重复项,基于两列 A,B,在另一列 C 中保持具有最大值的行

仅返回一列中的日期与另一列中的日期最接近的行?

查找一列中具有相同值而另一列中具有其他值的行?

基于另一列从一列中删除单词,然后创建并将其放入新列

Pandas - 在两列中查找具有匹配值的行并在另一列中相乘

在一列中对具有相同数据的行进行分组,并将其相关数据汇总在另一列中 [ORACLE SQL]