CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: pandas で特定の値がいくつあるか数える

今回は pandas で特定の値がいくつ数える方法について。 結論から先に書いてしまうと value_counts() という専用のメソッドがあるよ、という話。

使った環境は次の通り。

$ python -V
Python 3.6.4
$ pip list --format=columns | grep -i pandas
pandas             0.22.0

まずは pandas をインストールして Python の REPL を起動しておく。

$ pip install pandas
$ python

続いて、サンプル用のデータフレームを作っておく。 何かのグレードが英字一文字で格納されたデータのようだ。

>>> import pandas as pd
>>> data = [
...     "A",
...     "B",
...     "B",
...     "C",
... ]
>>> columns = ['grade']
>>> df = pd.DataFrame(data, columns=columns)

上記について特定の値がいくつあるか数えるとき、これまでは groupby() してから size() していた。

>>> df.groupby('grade').size()
grade
A    1
B    2
C    1
dtype: int64

もちろん、上記も間違いではないんだけど pandas の Series オブジェクトには value_counts() という専用のメソッドがある。

>>> df['grade'].value_counts()
B    2
A    1
C    1
Name: grade, dtype: int64

得られる結果はどちらも変わらない。 返り値は Series オブジェクトになる。

>>> s = df['grade'].value_counts()
>>> type(s)
<class 'pandas.core.series.Series'>

ちなみに、上記で得られた SeriesDataFrame に変換するには reset_index() メソッドを使うと便利っぽい。

>>> s.reset_index()
  index  grade
0     B      2
1     A      1
2     C      1
>>> type(s.reset_index())
<class 'pandas.core.frame.DataFrame'>

カラム名については name オプションで指定した方が良いかも。

>>> s.reset_index(name='count')
  index  count
0     B      2
1     A      1
2     C      1

いじょう。

めでたしめでたし。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理