pandas透视表:如何在"索引"和"列"中查找每组的计数



我是透视表的新手。我只想按Mth计算每个年龄组的人数。我试过

pivot1=pd.pivot_table(df,index=[ "Age Grp"], columns=["Mth"], values=["Age Grp"], aggfunc=pd.Series.nunique)

但得到ValueError: Grouper for 'Age Grp' not 1-dimensional

DF

|Age Grp | Mth  | 
| 0-4    |  1   |  
| 5 -9   | 5    |  
| 0-4    | 10   | 
| 10-14  | 5  |  

预期结果

Mth  |  1    | 5 | 10 |
|Age Grp |                |
| 0-4    |  1   |   0  | 1|
| 5 -9   | 0    |   1  | 0|
| 10-14  |  0   |   1  | 0|

我们可以用valuesaggfunc尝试crosstab而不是pivot_table,然后使用fillna0:替换NaN

ct_df = pd.crosstab(
df['Age Grp'], df['Mth'],
values=df['Age Grp'], aggfunc='nunique'
).fillna(0, downcast='infer')

ct_df:

Mth      1   5   10
Age Grp            
0-4       1   0   1
10-14     0   1   0
5-9       0   1   0

或使用groupby nunique+unstack:

df_us = df.groupby(
['Age Grp', 'Mth']
)['Age Grp'].nunique().unstack(fill_value=0)

df_us:

Mth      1   5   10
Age Grp            
0-4       1   0   1
10-14     0   1   0
5-9       0   1   0

设置和导入

import pandas as pd  # 1.3.4
df = pd.DataFrame({
'Age Grp': ['0-4', '5-9', '0-4', '10-14'], 'Mth': [1, 5, 10, 5]
})

或者:

df.groupby(['Age Grp', 'Mth']).size().unstack(fill_value=0)

Output:

Mth      1   5   10
Age Grp            
0-4       1   0   1
10-14     0   1   0
5-9       0   1   0

相关内容

  • 没有找到相关文章

最新更新