.pivot_table()
では、内部でGroupByを使っており、index
とcolumns
にデータフレームのすべての列を使い切っていると「値の列」がないため'count'
を指定するとそのように空白になります。
python
1df.pivot_table(index=index, columns=columns, aggfunc=aggfunc)
2# ↑これは
3# ↓これにほぼ等しい
4df.groupby([index, columns]).agg(aggfunc).unstack(columns)
python
1In [10]: df.groupby(['name', 'food']).count()
2Out[10]:
3Empty DataFrame
4Columns: []
5Index: [(hanako, apple), (hanako, banana), (hanako, orange), (jun, banana), (jun, orange), (tarou, apple), (tarou, banana), (tarou, orange)]
このような場合に数を数えたい場合は'size'
(len
でも可能)を指定します。
python
1In [14]: df.groupby(['name', 'food']).size().unstack('food', fill_value=0)
2Out[14]:
3food apple banana orange
4name
5hanako 1 1 1
6jun 0 1 1
7tarou 1 1 2
8
9In [15]: df.pivot_table(index='name', columns='food', aggfunc='size', fill_value=0)
10Out[15]:
11food apple banana orange
12name
13hanako 1 1 1
14jun 0 1 1
15tarou 1 1 2
なお、pd.crosstab()
や、pandasバージョン1.1.0以降であればvalue_counts()
メソッドを使う方法もあります(いずれの方法でも、中身でやっていることはほとんど同じです)。
python
1In [16]: pd.crosstab(df['name'], df['food'])
2Out[16]:
3food apple banana orange
4name
5hanako 1 1 1
6jun 0 1 1
7tarou 1 1 2
8
9In [17]: df.value_counts().unstack('food', fill_value=0)
10Out[17]:
11food apple banana orange
12name
13hanako 1 1 1
14jun 0 1 1
15tarou 1 1 2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/20 07:50