перечисление сгруппированных панелей данных панд - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть кадр данных pandas, где каждая строка является подпоследовательностью.Я хочу сделать следующее:

  1. Сгруппировать данные по 'SN', затем упорядочить каждую группу по 'дате'.
  2. Создать дополнительный столбец с именем 'steps', который является перечислениемстрок в каждой группе от 0 до n (0: n) на основе этого УСЛОВИЯ: внутри каждой упорядоченной группы начинайте перечисление с 0 до тех пор, пока «событие» не станет равным 1, повторите это в каждой группе.ВСЕГДА перезапускайте перечисление каждый раз, когда меняется «SN».Пожалуйста, ознакомьтесь с кодом и примерами изображений для большей ясности ... Заранее спасибо, ребята!

Приведенный ниже код создает исходные данные

data = {'date':['1/1/18', '1/2/18', '1/3/18', '1/1/18', '1/2/18', '2/2/18', 2/3/18', '2/4/18', '2/4/18', '2/4/18', '2/5/18'],
        'SN': ['111', '111', '111', '222', '222','222', '333', '333', '333', '444', '444'],
        'feat1': [1,2,3,4,5,6,7,8,9,10,11],
        'event':[0,0,1,0,1,0,0,1,0,0,1]}

orig_data = pd.DataFrame(data)

orig_data: enter image description here

Требуется следующий выход:

enter image description here

1 Ответ

0 голосов
/ 21 декабря 2018

IIUC, вы можете попробовать это;

EDITED

orig_data['steps_'] = orig_data.groupby(['SN',(1 == orig_data['event'].shift(1)).cumsum()]).cumcount()

print(orig_data)

     SN    date  event  feat1  steps_
0   111  1/1/18      0      1       0
1   111  1/2/18      0      2       1
2   111  1/3/18      1      3       2
3   222  1/1/18      0      4       0
4   222  1/2/18      1      5       1
5   222  2/2/18      0      6       0
6   333  2/3/18      0      7       0
7   333  2/4/18      1      8       1
8   333  2/4/18      0      9       0
9   444  2/4/18      0     10       0
10  444  2/5/18      1     11       1

note;Я пропустил групповое обозначение «дата», потому что упорядочение по «дате» создает проблемы с «333».«2/4/18» дается дважды, так какой из них стоит первым?

...