如何在两个分类列上形成数据透视表,并对每个索引进行计数?

2024-05-16 07:17:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由62名来自州立大学的本科生组成的数据框架,共有13栏(年龄、班级、专业、GPA等)

print(studentSurvey)

ID    Gender    Age    Major ... Text Messages
1     F         20     Other     120
2     M         22     CS        50
.
.
.
62    F         21     Retail    200

我想在studentSurvey上创建透视表。例如,我想知道有多少女性主修CS,男性主修其他课程,等等。我最接近的代码是:

studentSurvey.pivot_table(index="Gender", columns="Major", aggfunc='count')

              Age                         ... Text Messages                              
Major  Accounting  CIS Economics/Finance  ...         Other Retailing/Marketing Undecided
Gender                                    ...                                            
Female        3.0  3.0               7.0  ...           3.0                 9.0       NaN
Male          4.0  1.0               4.0  ...           4.0                 5.0       3.0

这不是我所需要的。我只需要Gender作为索引(行),其中Major下的所有唯一值都是列,每个单元格都包含该性别和主次的计数。我也尝试过只对这两列进行切片和旋转,但结果混淆了。有人能提出更好的建议吗?我对大熊猫的高级整形还不熟悉


Tags: 数据text框架age专业csgendermessages
2条回答

检查crosstab

pd.crosstab(df['Gender'], df['Major'])

修正你的代码

studentSurvey.pivot_table(index="Gender", columns="Major", values="ID", aggfunc="count")

尝试:

(studentSurvey.groupby(['Gender','Major'])
     .value_counts()
     .unstack('Major', fill_value=0)
)

或者您可以执行crosstab

pd.crosstab(studentSurvey['Gender'], studentSurvey['Major'])

相关问题 更多 >