Как разделить информационный фрейм панд с упорядоченными записями на порции с неопределенным размером? - PullRequest
0 голосов
/ 06 сентября 2018

Существуют записи действий пользователей, которые, например, упрощены как «купленные» и «прочие» (ТАБЛИЦА 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...