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

标签 python

我有捕获时间、目标和响应(用户是否打开链接)的电子邮件事件数据。响应 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/

相关文章:

python - 如何将 optparse() 代码升级为 argparse() 代码

python - 如何过滤单词排列以仅找到语义正确的 ngram? (Python 3,NLTK)

python - 如何在 Haskell 中表达这个 Python for 循环?

python - 矩阵的维度不等于相等

python - 从 Python-Docx 中的单元格中删除段落

python - 使用光流计算实际速度

python - 仅枚举具有特定名称的文件夹中的文件

python - 将两个嵌套列表压缩到单级字典的最有效方法是什么

python:在本地安装matplotlib

python - tensorflow.train.import_meta_graph 不起作用?