Состыковать ячейки из столбца относительно индикатора

#python #python-3.x #pandas

Вопрос:

У меня есть следующий фрейм данных:

импорт панд в качестве pd

 DataExe = [[2 , 1],  [4 , 1],  [7 , 2],  [9 , 3],  [10, 3],  [15, 3],  [19, 2],  [24, 2],  [27, 2],  [29, 2],  [37, 2],  [38, 2]]   DataExe = pd.DataFrame(data = DataExe, columns = ['ColA', 'Indicator'])  

Что я ищу, так это то, что значения «ColA» согласованы в соответствии с тем, что указывает «Индикатор». Например:

Как это наблюдается в «ColA» [2, 4], у них есть общее, что «Показатель» = 1. Затем мы создаем новый столбец «ColC», в котором для каждой строки помещаем все значения «ColA».

У меня должно быть следующее:

 ColA Indicator ColC 2 1 2, 4 4 1 2, 4 7 2 7, 19, 24, 27, 29, 37, 38 9 3 9, 10, 15 10 3 9, 10, 15 15 3 9, 10, 15 19 2 7, 19, 24, 27, 29, 37, 38 24 2 7, 19, 24, 27, 29, 37, 38 27 2 7, 19, 24, 27, 29, 37, 38 29 2 7, 19, 24, 27, 29, 37, 38 37 2 7, 19, 24, 27, 29, 37, 38 38 2 7, 19, 24, 27, 29, 37, 38  

Примечание: ColC-это новый столбец.

Ответ №1:

Вы могли бы использовать groupby transform :

 DataExe['ColC'] = DataExe.groupby('Indicator')['ColA'].transform(lambda g: ','.join(map(str, g)))  

Выход:

 ColA Indicator ColC 0 2 1 2,4 1 4 1 2,4 2 7 2 7,19,24,27,29,37,38 3 9 3 9,10,15 4 10 3 9,10,15 5 15 3 9,10,15 6 19 2 7,19,24,27,29,37,38 7 24 2 7,19,24,27,29,37,38 8 27 2 7,19,24,27,29,37,38 9 29 2 7,19,24,27,29,37,38 10 37 2 7,19,24,27,29,37,38 11 38 2 7,19,24,27,29,37,38  

Комментарии:

1. Привет, я видел, что вы очень хорошо осведомлены о пандах и науке о данных. Я не мог найти способ связаться с вами наедине. Я пытаюсь установить как можно больше связей, насколько это возможно, и по ходу дела учиться у программистов. Если это круто, чтобы лично сообщить вам о некоторых вопросах, пожалуйста, дайте мне знать.

2. @georgehere у вас есть конкретный вопрос на уме? Лучше всего, как правило, размещать свои вопросы здесь, чтобы вы могли воспользоваться опытом каждого. Если ты действительно хочешь, дай мне свой адрес электронной почты.

Ответ №2:

Это альтернатива, которая вернет группы чисел в виде списков:

 def GroupList(group):  group['ColC'] = [np.array(group.ColA)]*len(group)  return group  DataExe.groupby('Indicator').apply(GroupList)  Output:   ColA Indicator ColC 0 2 1 [2, 4] 1 4 1 [2, 4] 2 7 2 [7, 19, 24, 27, 29, 37, 38] 6 19 2 [7, 19, 24, 27, 29, 37, 38] 7 24 2 [7, 19, 24, 27, 29, 37, 38] 8 27 2 [7, 19, 24, 27, 29, 37, 38] 9 29 2 [7, 19, 24, 27, 29, 37, 38] 10 37 2 [7, 19, 24, 27, 29, 37, 38] 11 38 2 [7, 19, 24, 27, 29, 37, 38] 3 9 3 [9, 10, 15] 4 10 3 [9, 10, 15] 5 15 3 [9, 10, 15]  

Или более сложный синтаксис, но в одной строке:

 DataExe.groupby('Indicator').apply(lambda g:g.assign(ColC=[np.array(g.ColA)]*len(g))).droplevel(0)   ColA Indicator ColC 0 2 1 [2 4] 1 4 1 [2 4] 2 7 2 [ 7 19 24 27 29 37 38] 6 19 2 [ 7 19 24 27 29 37 38] 7 24 2 [ 7 19 24 27 29 37 38] 8 27 2 [ 7 19 24 27 29 37 38] 9 29 2 [ 7 19 24 27 29 37 38] 10 37 2 [ 7 19 24 27 29 37 38] 11 38 2 [ 7 19 24 27 29 37 38] 3 9 3 [ 9 10 15] 4 10 3 [ 9 10 15] 5 15 3 [ 9 10 15]