In [1]:
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
In [2]:
animals = DataFrame(np.arange(16).reshape(4, 4),
                   columns=['W', 'X', 'Y', 'Z'],
                   index=['Dog', 'Cat', 'Bird', 'Mouse'])
In [3]:
animals
Out[3]:
W X Y Z
Dog 0 1 2 3
Cat 4 5 6 7
Bird 8 9 10 11
Mouse 12 13 14 15
In [4]:
# 一部をNaNにします。
animals.ix[1:2, ['W', 'Y']] = np.nan 
animals
Out[4]:
W X Y Z
Dog 0 1 2 3
Cat NaN 5 NaN 7
Bird 8 9 10 11
Mouse 12 13 14 15
In [7]:
# お行儀のよさをデータ化します。
behavior_map = {'W': 'bad', 'X': 'good', 'Y': 'bad','Z': 'good'}
In [8]:
# mapを使ってグループ化します。
animal_col = animals.groupby(behavior_map, axis=1)
animal_col.sum()
Out[8]:
bad good
Dog 2 4
Cat NaN 12
Bird 18 20
Mouse 26 28
In [9]:
# Seriesを作ります。
behav_series = Series(behavior_map)
behav_series
Out[9]:
W     bad
X    good
Y     bad
Z    good
dtype: object
In [10]:
# このSeriesを使ってグループ化します。
animals.groupby(behav_series, axis=1).count()
Out[10]:
bad good
Dog 2 2
Cat 0 2
Bird 2 2
Mouse 2 2
In [11]:
animals
Out[11]:
W X Y Z
Dog 0 1 2 3
Cat NaN 5 NaN 7
Bird 8 9 10 11
Mouse 12 13 14 15
In [12]:
# 関数を渡す事もできます。
animals.groupby(len).sum()
Out[12]:
W X Y Z
3 0 6 2 10
4 8 9 10 11
5 12 13 14 15
In [13]:
# 関数と、キーを混ぜることもできます。
keys = ['A', 'B', 'A', 'B']
# indexの長さと、別のキーを使ってグループ化
animals.groupby([len, keys]).max()
Out[13]:
W X Y Z
3 A 0 1 2 3
B NaN 5 NaN 7
4 A 8 9 10 11
5 B 12 13 14 15