Python:在大型数据集上处理groupby

时间:2018-05-29 05:50:42

标签: python-2.7 pandas

我有一个文件,就像这样,

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的{​​{1}} COURSE_FEE。此外,如果CLASS_ID具有相同的COURSE_ID,则需要获取相应COURSE_FEE的总和。

所以预期的输出会是这样的,

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)

该脚本为我提供了预期的输出,但输入量很小。

我的输入文件实际上包含2亿条记录,因此我的脚本会抛出OUT OF MEMORY EXCEPTION

你们中的任何一位python老兵能帮助新手建议一种方法来处理这个脚本上的这么大的输入吗?提前谢谢。

0 个答案:

没有答案