Это больше похоже на задачу для панд, сначала мы можем построить кадр данных:
import pandas as pd
df = pd.DataFrame([
['Burgundy Bichon Frise','1','137'],
['Pumpkin Pomeranian','1','182'],
['Purple Puffin','1','125'],
['Wisteria Wombat','1','109'],
['Burgundy Bichon Frise','2','168'],
['Pumpkin Pomeranian','2','141'],
['Purple Puffin','2','143'],
['Wisteria Wombat','2','167'],
['Burgundy Bichon Frise','3','154'],
['Pumpkin Pomeranian','3','175'],
['Purple Puffin','3','128'],
['Wisteria Wombat','3','167']], columns=['animal', 'region', 'n'])
Затем мы можем преобразовать region
и n
в числа, это облегчит вычисление статистики:
df.region = pd.to_numeric(df.region)
df.n = pd.to_numeric(df.n)
Наконец, мы можем выполнить .groupby(..)
и затем вычислить агрегат, например:
>>> df[['animal', 'n']].groupby(('animal')).min()
n
animal
Burgundy Bichon Frise 137
Pumpkin Pomeranian 141
Purple Puffin 125
Wisteria Wombat 109
>>> df[['animal', 'n']].groupby(('animal')).max()
n
animal
Burgundy Bichon Frise 168
Pumpkin Pomeranian 182
Purple Puffin 143
Wisteria Wombat 167
>>> df[['animal', 'n']].groupby(('animal')).mean()
n
animal
Burgundy Bichon Frise 153.000000
Pumpkin Pomeranian 166.000000
Purple Puffin 132.000000
Wisteria Wombat 147.666667
Редактировать : получить минимальную строку за animal
Мы можем использовать idxmin
/ idxmax
, чтобы получить номера индексов для самых маленьких / самых больших строк на животное, а затем использовать df.iloc[..]
, чтобы получить эти строки, например:
>>> df.ix[df.groupby(('animal'))['n'].idxmin()]
animal region n
0 Burgundy Bichon Frise 1 137
5 Pumpkin Pomeranian 2 141
2 Purple Puffin 1 125
3 Wisteria Wombat 1 109
>>> df.ix[df.groupby(('animal'))['n'].idxmax()]
animal region n
4 Burgundy Bichon Frise 2 168
1 Pumpkin Pomeranian 1 182
6 Purple Puffin 2 143
7 Wisteria Wombat 2 167
Здесь 0, 5, 2, 3
(для idxmin
) - «номера строк» кадра данных.