Python: работа с групповыми данными на большом наборе данных - PullRequest
0 голосов
/ 29 мая 2018

У меня есть файл, например,

ID,CLASS_ID,COURSE_FEE,COURSE_ID
1,9XG,500,3
2,07CWG,1000,6
3,9XG,150,6
4,07CWG,1500,6
5,016IRE,80,9
6,9XG,100,10
7,07CWG,500,6

Я бы хотел получить те CLASS_IDs, которые имеют больший COURSE_ID относительно его COURSE_FEE.Также, если CLASS_ID имеет то же самое COURSE_ID, то необходимо извлечь общую сумму соответствующих COURSE_FEE s.

Таким образом, ожидаемый результат будет примерно таким,

ID,CLASS_ID,COURSE_ID,COURSE_FEE
6,9XG,10,100
5,016IRE,9,80
2,07CWG,6,3000

Это сценарий, который я создал для этого:

import pandas as pandas

df = pandas.read_csv('Inpt.txt', dtype={'CLASS_ID': str})
df['COURSE_ID_AGG'] = df.groupby(['CLASS_ID', 'COURSE_ID'])['CLASS_ID'].transform(pandas.Series.value_counts)
df['SUM'] = df.groupby(['CLASS_ID', 'COURSE_ID'])['COURSE_FEE'].transform('sum')
df = df.drop_duplicates(subset=['CLASS_ID', 'COURSE_ID'])
df = df.sort_values(by=['CLASS_ID', 'COURSE_ID', 'SUM'], ascending=[0, 0, 0])
df.drop(['COURSE_FEE', 'COURSE_ID_AGG'], axis=1, inplace=True)
df = df.rename(columns={'SUM': 'COURSE_FEE'})
df = df.groupby('CLASS_ID', as_index=False).nth(0)
df.to_csv('Op.txt', index=False)

Этот сценарий дает ожидаемый результат, но для небольших входных данных.

Мой входной файл на самом деле содержит 200 миллионов записей и потомуиз этого мой сценарий выдает OUT OF MEMORY EXCEPTION.

Может ли кто-нибудь из вас, ветеранов Python, помочь новичку в предложении способа обработки такого большого объема ввода в этот сценарий?Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...