1. ホーム
  2. python

Python Pandas : ピボットテーブル with aggfunc = count unique distinct

2023-11-27 18:19:47

質問

このコード

df2 = (
    pd.DataFrame({
        'X' : ['X1', 'X1', 'X1', 'X1'], 
        'Y' : ['Y2', 'Y1', 'Y1', 'Y1'], 
        'Z' : ['Z3', 'Z1', 'Z1', 'Z2']
    })
)
g = df2.groupby('X')
pd.pivot_table(g, values='X', rows='Y', cols='Z', margins=False, aggfunc='count')

は以下のようなエラーを返します。

Traceback (most recent call last): ... 
AttributeError: 'Index' object has no attribute 'index'

のピボットテーブルを作成するにはどうすればよいですか? ユニークな値の数 のピボットテーブルを得るにはどうしたらいいですか?

そこに aggfunc を使うべきでしょうか?私は使用する必要があります np.bincount() ?

NB. 私が意識しているのは pandas.Series.values_counts() は知っていますが、私はピボットテーブルが必要です。


EDIT: 出力は次のようになります。

Z   Z1  Z2  Z3
Y             
Y1   1   1 NaN
Y2 NaN NaN   1

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

このようなことですか?

>>> df2.pivot_table(values='X', index='Y', columns='Z', aggfunc=lambda x: len(x.unique()))

Z   Z1  Z2  Z3
Y             
Y1   1   1 NaN
Y2 NaN NaN   1

ただし len を使うということは NA がないことを前提としています。この場合 x.value_counts().count() または len(x.dropna().unique()) でなければ