Этот является аналогичным ответом на мой вопрос. Тем не менее, я хочу сделать все это в методе apply
и написать метод для него.
У меня есть DataFrame, подобный этому:
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
столбец expected_results
создан на основе следующего объяснения:
Для каждого username
, Для каждой строки, если purchase_condition
равно 1
, я считаю число 0
с между этой строкой и предыдущим 1
и помещаю это число в столбец expected_results
,
Например,
- В 4-й строке (строка № 3)
expected_results
равно 3, потому что первые 3 строки purchase_condition
0
. - В 7-й строке (строка № 6)
expected_results
равно 2, потому что между строкой № 6 и строкой № 3 2 строки, у которых purchase_condition
равно 0
. - В 15-й строке (строка # 14),
expected_results
равно 0, потому что, хотя purchase_condition
равно 1
, значение предыдущей строки (строки # 13) purchase_condition
также равно 1
.
Is можно сделать это методом apply
или использовать какой-нибудь cumsum
?