我是透视表的新手。我只想按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|
我们可以用values
和aggfunc
尝试crosstab
而不是pivot_table
,然后使用fillna
用0
:替换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