У меня есть панда DataFrame с большим количеством строк. Я пытаюсь создать новые столбцы для фрейма на основе внутригруппового ранжирования членов. Вот некоторые поддельные данные, иллюстрирующее то, что у меня есть:Использование pandas для создания новых столбцов на основе внутригруппового ранжирования
Num_members = int(1.e7)
Num_groups = int(1.e5)
members = pd.DataFrame({
'ID': np.arange(Num_members),
'groupID': np.random.random_integers(0, 2*Num_groups, Num_members),
'groupmass': np.zeros(Num_members),
'brightness': np.random.uniform(8,12, Num_members),
'color':np.random.uniform(0,1,Num_members)
})
Я пытаюсь создать две новые колонки для членов:
Внутриорганизационной группа ранга порядка для яркости, так что яркая член группы получит значение , следующий по яркости и т.д.
Цвет самого яркого члена группы. Таким образом, для этого столбца всем членам той же группы присваивается то же значение, что и «цвет» элемента с внутригрупповой яркостью-ранг = 0.
Я знаю, что операция GroupBy предназначена именно для такого рода манипуляций, но я не мог понять, как сделать это правильно. И скорость - важная проблема, поскольку мой набор данных большой, и мне нужно сделать это в анализе вероятности MCMC.
Это действительно * много * быстрее, cel. Это определенно решает проблему «найти самый яркий член каждой группы». Это не совсем то, что я искал, что «находило * цвет» самого яркого члена группы, но все равно это все еще очень полезно. Я бы с радостью поддержал, если бы вы не возражали, просто кратко объясняя логику этот синтаксис, который немного сложнее, чем ваше первое решение. (Аналогично, я бы с радостью предоставил дополнительную информацию о цветовом вопросе, но вы уже были очень полезны, как есть). – aph
@aph, и есть еще одно обновление ... он становится все сложнее, я думаю ...: D – cel
Я думаю, что использовать «трансформировать» чище, но, к сожалению, мои тесты показывают, что он медленнее.: -/Я думаю, основная проблема заключается в том, что баланс Python против Cython в кодовой базе оптимизирован для нескольких групп с большим количеством участников, а не с множеством групп. – DSM