Я использую модуль pandas. В моем поле DataFrame 3 находятся учетная запись, месяц и зарплата.Pandas groupby + преобразование на 50 миллионов строк занимает 3 часа
account month Salary
1 201501 10000
2 201506 20000
2 201506 20000
3 201508 30000
3 201508 30000
3 201506 10000
3 201506 10000
3 201506 10000
3 201506 10000
Я делаю groupby на счете и в месяц и конвертирую зарплату в проценты от зарплаты группы, которой он принадлежит.
MyDataFrame['salary'] = MyDataFrame.groupby(['account'], ['month'])['salary'].transform(lambda x: x/x.sum())
Теперь MyDataFrame становится как ниже таблице
account month Salary
1 201501 1
2 201506 .5
2 201506 .5
3 201508 .5
3 201508 .5
3 201506 .25
3 201506 .25
3 201506 .25
3 201506 .25
Проблема: Операция на 50 миллионов таких строк занимает 3 часа. Я выполнил groupyby отдельно быстро, занимает 5 секунд. Я думаю, что это преобразование занимает много времени здесь. есть ли способ улучшить производительность?
Update: Для обеспечения большей ясности, добавив пример Некоторые владелец счета получили зарплату 2000 в июне и 8000 в июле, так что его доля становится .2 в июне и в июле .8. моя цель - рассчитать эту пропорцию.
Ответ = Запрос. Таким образом, создайте набор данных, чтобы ответить на каждую запись для лучшей производительности. Иначе ресурс отходов. Не перебирайте свои коллекции. Почему google бот посещает все веб-сайты? – dsgdfg
@SDilmac Забыл добавить имя столбца после groupby, обновленный сейчас. Не уверен, что это была трата ресурсов в соответствии с вашим комментарием. И когда вы говорите, не перебирайте свою коллекцию, а что другое? это то что мне нужно. когда все в памяти, почему мне нужно перебирать один за другим. но я не знаю, что является другим способом. – Vipin
И когда вы говорите, не итерируйте свою коллекцию = Вклад процента коллекций (1/50 м), поэтому, когда вы проверяете общее состояние, вы просматриваете всю коллекцию. Друг вы будете готовы ко всем запросам. Создайте коллекцию статусов коллекций. Записывайте исходный и статус (перегруппируйте, анализируйте) коллекцию с одинаковым временем. – dsgdfg