gpt4 book ai didi

python - 捕获行直到第一次响应 python 中的事件

转载 作者:太空宇宙 更新时间:2023-11-04 05:28:55 25 4
gpt4 key购买 nike

我有捕获时间、目标和响应(用户是否打开链接)的电子邮件事件数据。响应 1 表示用户已打开内容。

示例数据:

senddate    userid  content  response
2016-06-01 100 50505 NaN
2016-06-01 100 50505 NaN
2016-06-01 100 50505 1
2016-06-01 100 50505 1
2016-06-02 100 50505 NaN
2016-06-02 100 50505 1
2016-06-02 100 50505 1

现在我只想保留行直到第一次响应。我想丢弃在第一个响应之后出现的任何行,并且我想为多个发送日期执行此操作。

输出数据集:

    senddate    userid  content  response
2016-06-01 100 50505 NaN
2016-06-01 100 50505 NaN
2016-06-01 100 50505 1
2016-06-02 100 50505 NaN
2016-06-02 100 50505 1

如果有人可以帮助构建逻辑,我们将不胜感激。

最佳答案

您可以使用 pandas实现这一目标:

如果您在 'senddate' 列上 groupby 我们可以生成一个 bool 掩码,将索引与 first_valid_index 进行比较,这将创建一个多索引,其中第一级是日期,第二层是有效的索引值,然后我们使用 get_level_values 检索这些值,并使用 loc 检索这些值:

In [17]:
import pandas as pd
df = pd.read_csv(your_file_path)
df.loc[df.groupby('senddate')['response'].apply(lambda x: x[x.index <= x.first_valid_index()]).index.get_level_values(1)]

Out[17]:
senddate userid content response
0 2016-06-01 100 50505 NaN
1 2016-06-01 100 50505 NaN
2 2016-06-01 100 50505 1.0
4 2016-06-02 100 50505 NaN
5 2016-06-02 100 50505 1.0

以上分解:

In [18]:
df.groupby('senddate')['response'].apply(lambda x: x[x.index <= x.first_valid_index()])

Out[18]:
senddate
2016-06-01 0 NaN
1 NaN
2 1.0
2016-06-02 4 NaN
5 1.0
Name: response, dtype: float64

In [19]:
df.groupby('senddate')['response'].apply(lambda x: x[x.index <= x.first_valid_index()]).index.get_level_values(1)

Out[19]:
Int64Index([0, 1, 2, 4, 5], dtype='int64')

关于python - 捕获行直到第一次响应 python 中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37784795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com