74

このコード:

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'

他の 2 つの列の 1 つの DataFrame 列の一意の値の数を含むピボット テーブルを取得するにはどうすればよいですか? ユニークなカウント
はありますか?aggfuncを使用する必要がありnp.bincount()ますか?

注意。pandas.Series.values_counts()ただし、ピボットテーブルが必要であることは承知しています。


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

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

9 に答える 9

116

このようなことを意味しますか?

>>> 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

using は、DataFramelenに s がないことを前提としていることに注意してください。NAあなたはすることができx.value_counts().count()ますlen(x.dropna().unique())

于 2012-10-12T15:19:00.237 に答える
53

これは、 内のエントリをカウントする良い方法です.pivot_table:

>>> df2.pivot_table(values='X', index=['Y','Z'], columns='X', aggfunc='count')

        X1  X2
Y   Z       
Y1  Z1   1   1
    Z2   1  NaN
Y2  Z3   1  NaN
于 2013-10-28T08:48:01.100 に答える
3

の個別の値ごとにピボット テーブルを作成できますX。この場合、

for xval, xgroup in g:
    ptable = pd.pivot_table(xgroup, rows='Y', cols='Z', 
        margins=False, aggfunc=numpy.size)

の各値のピボット テーブルを作成しますXptableを使用して索引付けすることができますxvalue。このコードで、私は (for X1)を取得します

     X        
Z   Z1  Z2  Z3
Y             
Y1   2   1 NaN
Y2 NaN NaN   1
于 2012-10-12T15:21:39.160 に答える