Python 如何计算行中的条目数并在字段更改时重置
我试图计算每个用户连续打开的电子邮件数量。我有按电子邮件地址和日期排序的数据,可以计算连续打开的#,但我不知道如何在有新电子邮件地址时将其重置为0Python 如何计算行中的条目数并在字段更改时重置,python,pandas,Python,Pandas,我试图计算每个用户连续打开的电子邮件数量。我有按电子邮件地址和日期排序的数据,可以计算连续打开的#,但我不知道如何在有新电子邮件地址时将其重置为0 in_a_row = [] count = 0 for row in merge['Opened?']: if row == 1: count += 1 in_a_row.append(count) elif row == 0: count = 0 in_a_row.a
in_a_row = []
count = 0
for row in merge['Opened?']:
if row == 1:
count += 1
in_a_row.append(count)
elif row == 0:
count = 0
in_a_row.append(count)
merged['in_a_row'] = in_a_row
这就是我目前所拥有的。这会计算一行中打开的数字,但当有新的电子邮件地址时,不会重置为0
in_a_row = []
count = 0
for row in merge['Opened?']:
if row == 1:
count += 1
in_a_row.append(count)
elif row == 0:
count = 0
in_a_row.append(count)
merged['in_a_row'] = in_a_row
下面是它目前的样子
Index email_address sent_date sent_rank Opened? in_a_row
0 email_A@gmail.com 5/15/2018 1 1 1
1 email_A@gmail.com 5/23/2018 2 0 0
2 email_A@gmail.com 5/23/2018 3 1 1
3 email_B@gmail.com 5/26/2018 1 1 2
4 email_B@gmail.com 5/27/2018 2 1 3
5 email_B@gmail.com 8/2/2018 3 0 0
6 email_B@gmail.com 8/3/2018 4 1 1
7 email_B@gmail.com 12/12/2018 5 1 2
8 email_C@gmail.com 12/12/2018 1 1 3
9 email_C@gmail.com 2/6/2019 2 0 0
10 email_C@gmail.com 2/12/2019 3 1 1
这就是它应该看起来的样子
Index email_address sent_date sent_rank Opened? in_a_row
0 email_A@gmail.com 5/15/2018 1 1 1
1 email_A@gmail.com 5/23/2018 2 0 0
2 email_A@gmail.com 5/23/2018 3 1 1
3 email_B@gmail.com 5/26/2018 1 1 1
4 email_B@gmail.com 5/27/2018 2 1 2
5 email_B@gmail.com 8/2/2018 3 0 0
6 email_B@gmail.com 8/3/2018 4 1 1
7 email_B@gmail.com 12/12/2018 5 1 2
8 email_C@gmail.com 12/12/2018 1 1 1
9 email_C@gmail.com 2/6/2019 2 0 0
10 email_C@gmail.com 2/12/2019 3 1 1
使用lambda使用(!=
)尝试此使用,并且:
注意:我认为在您想要的输出中可能仍然有一些输入错误。例如,idx8
和9
输入和输出对于Opened?
[输出]
Index email_address sent_date sent_rank Opened? in_a_row
0 0 email_A@gmail.com 5/15/2018 1 1 1
1 1 email_A@gmail.com 5/23/2018 2 0 0
2 2 email_A@gmail.com 5/23/2018 3 1 1
3 3 email_B@gmail.com 5/26/2018 1 1 1
4 4 email_B@gmail.com 5/27/2018 2 1 2
5 5 email_B@gmail.com 8/2/2018 3 0 0
6 6 email_B@gmail.com 8/3/2018 4 1 1
7 7 email_B@gmail.com 12/12/2018 5 1 2
8 8 email_C@gmail.com 12/12/2018 1 1 1
9 9 email_C@gmail.com 2/6/2019 2 0 0
10 10 email_C@gmail.com 2/12/2019 3 1 1
我没有得到第一次从1更改为0的逻辑(在
行中)。这不是一个新地址吗?当打开时?
在同一电子邮件地址处从1变为0,计数器也会重置?另一个问题,为什么所有电子邮件地址都从0开始计数,但第一个电子邮件地址从1
开始?表中似乎有一些打字错误,对此表示抱歉,现在应该修好了。什么时候开门0,表示电子邮件在打开时未打开?=1这意味着它被打开了。当电子邮件未打开时,计数器应始终重置为0,但当有新的电子邮件地址时,计数器也应重置为0。电子邮件地址是否总是以这种方式聚集在一起?i、 可以看到电子邮件吗_A@gmail.com电子邮件后_C@gmail.com在第11排或第12排?这非常接近。它确实适用于样本数据,但当我将其应用于更大的数据集时,似乎存在样本数据没有考虑的异常。我更新了索引5,所以这里有一个它不起作用的例子。现在开门了?在索引5处等于0,在索引6处的行应该是0,但它是2。另外,你的打字错误是对的,谢谢你指出。谢谢你指出@Tim344。我会调查一下it@Tim344更新我的答案,如果你想再试一次?