Существуют записи действий пользователей, которые, например, упрощены как «купленные» и «прочие» (ТАБЛИЦА 1).
Я пытаюсь добавить столбец «purchase_cycle», в котором будет указан номер, обозначающий группу, в которую входят все действия пользователя от предыдущей покупки до текущей (см. ТАБЛИЦА 2), или от шага 1, если это первая покупка. Если есть группа действий, которая не заканчивается «покупкой», то группа не считается полным циклом и присваивается Nan.
TABLE1 (добавлены новые строки, чтобы сделать его более читабельным):
user_id actions_order action_category
0043e1a6 1 purchased
0043e1a6 2 other
0043e1a6 3 other
0070f782 1 other
0070f782 2 other
0070f782 3 other
0070f782 4 other
0070f782 5 other
0070f782 6 purchased
0070f782 7 other
0070f782 8 other
0070f782 9 other
0070f782 10 purchased
0070f782 11 other
0070f782 12 other
0070f782 13 other
008aa58a 1 other
008aa58a 2 other
008aa58a 3 other
008aa58a 4 other
008aa58a 5 purchased
008aa58a 6 other
008aa58a 7 other
008aa58a 8 other
008aa58a 9 other
008aa58a 10 other
008aa58a 11 other
008aa58a 12 purchased
008aa58a 13 other
008aa58a 14 other
008aa58a 15 other
TABLE2 (покупка_цикл):
user_id actions_order action_category purchase_cycle
0043e1a6 1 purchased 1
0043e1a6 2 other nan
0043e1a6 3 other nan
0070f782 1 other 1
0070f782 2 other 1
0070f782 3 other 1
0070f782 4 other 1
0070f782 5 other 1
0070f782 6 purchased 1
0070f782 7 other 2
0070f782 8 other 2
0070f782 9 other 2
0070f782 10 purchased 2
0070f782 11 other nan
0070f782 12 other nan
0070f782 13 other nan
008aa58a 1 other 1
008aa58a 2 other 1
008aa58a 3 other 1
008aa58a 4 other 1
008aa58a 5 purchased 1
008aa58a 6 other 2
008aa58a 7 other 2
008aa58a 8 other 2
008aa58a 9 other 2
008aa58a 10 other 2
008aa58a 11 other 2
008aa58a 12 purchased 2
008aa58a 13 other nan
008aa58a 14 other nan
008aa58a 15 other nan
Мне удалось найти только ответ Джеймса Шиннера , однако его решение предполагает, что размер кусков одинаков для всех групп, что не в моем случае.
def chunk(seq, size):
return (seq[pos:pos + size] for pos in range(0, len(seq), size))
for df_chunk in chunk(df, 100):
# |
# The chunk size
# your code here
pass