Python 如何应用一种方法来计算熊猫中一个值之间的零值数?

Python 如何应用一种方法来计算熊猫中一个值之间的零值数?,python,pandas,group-by,Python,Pandas,Group By,这与我的问题的答案相似。但是,我想在apply方法中完成所有这些,并为其编写一个方法 我有这样一个数据帧: data = {'username':['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b','b', 'b', 'b', 'b', 'b'], 'purchase_condition':[0, 0, 0, 1, 0, 0, 1, 0, 0,

这与我的问题的答案相似。但是,我想在apply方法中完成所有这些,并为其编写一个方法

我有这样一个数据帧:

data = {'username':['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a',
                    'b', 'b', 'b', 'b', 'b','b', 'b', 'b', 'b', 'b'],
        'purchase_condition':[0, 0, 0, 1, 0, 0, 1, 0, 0,
                              0, 0, 0, 0, 1, 1, 1, 0, 0, 1]}
data = pd.DataFrame(data)
data['expected_results'] = [0, 0, 0, 3, 0, 0, 2, 0, 0,
                     0, 0, 0, 0, 4, 0, 0, 0, 0, 2]
     username  purchase_condition  expected_results
0         a                   0                 0
1         a                   0                 0
2         a                   0                 0
3         a                   1                 3
4         a                   0                 0
5         a                   0                 0
6         a                   1                 2
7         a                   0                 0
8         a                   0                 0
9         b                   0                 0
10        b                   0                 0
11        b                   0                 0
12        b                   0                 0
13        b                   1                 4
14        b                   1                 0
15        b                   1                 0
16        b                   0                 0
17        b                   0                 0
18        b                   1                 2
数据如下所示:

data = {'username':['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a',
                    'b', 'b', 'b', 'b', 'b','b', 'b', 'b', 'b', 'b'],
        'purchase_condition':[0, 0, 0, 1, 0, 0, 1, 0, 0,
                              0, 0, 0, 0, 1, 1, 1, 0, 0, 1]}
data = pd.DataFrame(data)
data['expected_results'] = [0, 0, 0, 3, 0, 0, 2, 0, 0,
                     0, 0, 0, 0, 4, 0, 0, 0, 0, 2]
     username  purchase_condition  expected_results
0         a                   0                 0
1         a                   0                 0
2         a                   0                 0
3         a                   1                 3
4         a                   0                 0
5         a                   0                 0
6         a                   1                 2
7         a                   0                 0
8         a                   0                 0
9         b                   0                 0
10        b                   0                 0
11        b                   0                 0
12        b                   0                 0
13        b                   1                 4
14        b                   1                 0
15        b                   1                 0
16        b                   0                 0
17        b                   0                 0
18        b                   1                 2
“预期结果”列是根据以下说明创建的:

对于每一个用户名,如果purchase\u condition为1,则每一行我都会计算该行与前一个1之间的0数,并将该数字放在expected\u results列中

比如说,

在第4行第3行中,预期的_结果为3,因为前3行的采购_条件为0。 在第7行第6行中,预期的_结果为2,因为第6行和第3行之间有2行的购买_条件为0。 在第15行第14行中,预期的_结果为0,因为尽管其采购_条件为1,但前一行第13行的采购_条件值也为1。 是否可以使用应用方法或使用某种cumsum?

应用方法是引擎盖下的循环,因此如果可能,最好避免使用熊猫

您可以首先通过==对m进行比较,然后获取掩码m1的第一个值(掩码的连续真值和假值),获取到s的连续组

最后按组计数,并按组重复,并且仅为前1设置,同时按位和按中链接掩码(&F):

方法适用于引擎盖下的环,所以如果可能的话,最好是避免在熊猫

您可以首先通过==对m进行比较,然后获取掩码m1的第一个值(掩码的连续真值和假值),获取到s的连续组

最后按组计数,并按组重复,并且仅为前1设置,同时按位和按中链接掩码(&F):

你能解释为什么第13行的预期结果是4而不是6,因为它的用户名是b吗。正如我在问题中所写,我希望对每个用户名分别执行这些操作。您能否解释为什么第13行的预期结果是4而不是6,因为它的用户名是b。正如我在问题中所写的,我希望每个用户名的这些操作都是单独完成的。