gpt4 book ai didi

python - 如何从数据帧生成频率表?

转载 作者:太空宇宙 更新时间:2023-11-03 11:15:17 24 4
gpt4 key购买 nike

我有一个 df,其原始调查数据类似于以下内容,包含 12000 行和 40 个问题。所有回答都是明确的

import pandas as pd

df = pd.DataFrame({'Age' : ['20-30','20-30','30-45', '20-30','30-45','20-30'],
'Gender' : ['M', 'F', 'F','F','M','F'],
'Income' : ['20-30k', '30-40k', '40k+', '40k+', '40k+', '20-30k'],
'Question1' : ['Good','Bad','OK','OK','Bad','Bad'],
'Question2' : ['Happy','Unhappy','Very_Unhappy','Very_Unhappy','Very_Unhappy','Happy']})

我想根据年龄、性别和收入对每个问题的回答进行分类,为每个问题生成一个频率(按百分比)表,如下所示 screenshot showing questions .

enter image description here

Crosstab 产生了太多的类别,即它按收入和收入内部、年龄等进行分割。所以我不确定如何最好地解决这个问题。我确定这是一个简单的问题,但我是 python 的新手,我们将不胜感激

最佳答案

如您所说,对所有列使用交叉表会按每一列分割结果。您可以使用单独的交叉表,然后连接

pd.concat([pd.crosstab(df.Question1, df.Gender), pd.crosstab(df.Question1, df.Income), pd.crosstab(df.Question1, df.Age)], axis = 1)

F M 20-30k 30-40k 40k+ 20-30 30-45
Question1
Bad 2 1 1 1 1 2 1
Good 0 1 1 0 0 1 0
OK 2 0 0 0 2 1 1

编辑:在列中获得额外的级别

age = pd.crosstab(df.Question1, df.Age)
age.columns = pd.MultiIndex.from_product([['Age'], age.columns])
gender = pd.crosstab(df.Question1, df.Gender)
gender.columns = pd.MultiIndex.from_product([['Gender'], gender.columns])
income = pd.crosstab(df.Question1, df.Income)
income.columns = pd.MultiIndex.from_product([['Income'], income.columns])
pd.concat([age, gender, income], axis = 1)


Age Gender Income
20-30 30-45 F M 20-30k 30-40k 40k+
Question1
Bad 2 1 2 1 1 1 1
Good 1 0 0 1 1 0 0
OK 1 1 2 0 0 0 2

关于python - 如何从数据帧生成频率表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53110590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com