1. ホーム
  2. python

[解決済み] Pandas DataFrameで複数のカラムの値を一度に取得する方法は?

2023-05-13 04:18:42

質問

カテゴリ値(0または1)を持つ複数の列を持つPandas DataFrameがある場合、すべての列のvalue_countsを同時に便利に取得することは可能でしょうか?

例えば、以下のようなDataFrameを生成したとします。

import numpy as np
import pandas as pd
np.random.seed(0)
df = pd.DataFrame(np.random.randint(0, 2, (10, 4)), columns=list('abcd'))

こんな感じでDataFrameを取得できます。

   a  b  c  d
0  0  1  1  0
1  1  1  1  1
2  1  1  1  0
3  0  1  0  0
4  0  0  0  1
5  0  1  1  0
6  0  1  1  1
7  1  0  1  0
8  1  0  1  1
9  0  1  1  0

すべての列の値カウントを取得して、都合よく次のように取得するにはどうしたらよいでしょうか。

   a  b  c  d
0  6  3  2  6
1  4  7  8  4

私の現在の解決策は

pieces = []
for col in df.columns:
    tmp_series = df[col].value_counts()
    tmp_series.name = col
    pieces.append(tmp_series)
df_value_counts = pd.concat(pieces, axis=1)

しかし、もっと簡単な方法があるはずです。スタッキング、ピボット、あるいはgroupbyのような?

どのように解決するのですか?

単に apply を呼び出し pd.Series.value_counts :

In [212]:
df = pd.DataFrame(np.random.randint(0, 2, (10, 4)), columns=list('abcd'))
df.apply(pd.Series.value_counts)
Out[212]:
   a  b  c  d
0  4  6  4  3
1  6  4  6  7