In [5]:
import pandas as pd
import matplotlib.pyplot as plt
import time

years=range(1880,2017)

pieces = []
columns = [ 'name', 'sex', 'births' ]
for year in years:
    #меняем год в имени файла
    path = 'c:/names/yob%d.txt' %year
    #читаем файл с полями
    frame = pd.read_csv(path, names=columns)
    #дописываем поле года
    frame['year'] = year
    #собираем в единый список
    pieces.append(frame)
    
#создаем DataFrame, внимание! игнорируем исходные номера строк  
names = pd.concat(pieces,ignore_index = True)

start = time.time()
gr=names[['name','sex','births']].groupby(['name','sex'],sort=False).sum().reset_index()
gr['dub']=gr.duplicated('name', keep=False)
gr_dub=gr[gr.dub==True]
max_name=gr_dub[['name','births']].groupby('name',sort=False).sum().reset_index().nlargest(3,'births')

    
    
print (max_name)
print ('time: %f' % (time.time() - start))


       name   births
292   James  5159306
212    John  5127501
411  Robert  4829274
time: 0.453218

In [6]:
import pandas as pd
import matplotlib.pyplot as plt
import time


years=range(1880,2017)

pieces = []
columns = [ 'name', 'sex', 'births' ]
for year in years:
    #меняем год в имени файла
    path = 'c:/names/yob%d.txt' %year
    #читаем файл с полями
    frame = pd.read_csv(path, names=columns)
    #дописываем поле года
    frame['year'] = year
    #собираем в единый список
    pieces.append(frame)

#создаем DataFrame, внимание! игнорируем исходные номера строк  
names = pd.concat(pieces,ignore_index = True)

start = time.time()
gr=names[['name','sex','births']].groupby(['name','sex'],sort=False).sum().reset_index()
gr['dub']=gr.duplicated('name', keep=False)
gr_dub=gr[gr.dub==True]
gd_dub_name=gr_dub[['name','births']].groupby('name').sum().sort_values('births',ascending=False).reset_index()
max_name=gd_dub_name.iloc[:3]

print (max_name)

print ('time: %f' % (time.time() - start))


     name   births
0   James  5159306
1    John  5127501
2  Robert  4829274
time: 0.484462

In [8]:
import numpy as np

t=[]
n=range(50)
for i in n:
    start = time.time()
    gr=names[['name','sex','births']].groupby(['name','sex'],sort=False).sum().reset_index()
    gr['dub']=gr.duplicated('name', keep=False)
    gr_dub=gr[gr.dub==True]
    max_name=gr_dub[['name','births']].groupby('name',sort=False).sum().reset_index().nlargest(3,'births')
    t.append((time.time() - start))
    
    
print(np.mean(t)) 
print(np.std(t))


0.464729824066
0.0159315743479

In [9]:
t=[]
n=range(50)
for i in n:
    start = time.time()
    gr=names[['name','sex','births']].groupby(['name','sex'],sort=False).sum().reset_index()
    gr['dub']=gr.duplicated('name', keep=False)
    gr_dub=gr[gr.dub==True]
    gd_dub_name=gr_dub[['name','births']].groupby('name').sum().sort_values('births',ascending=False).reset_index()
    max_name=gd_dub_name.iloc[:3]
    t.append((time.time() - start))
    
print(np.mean(t)) 
print(np.std(t))


0.512146835327
0.0623015044059

In [ ]: