具有多个响应集的交叉表

问题描述 投票:0回答:1

我正在使用 Python 尝试创建一个使用多响应问题计算交叉表的函数。到目前为止我的想法是:

给定对应于多个响应集的变量字典:

multiple_response_dict =  {
    'Q2': ['Q2_1', 'Q2_2', 'Q2_3'],
    'Q4': ['Q4_1', 'Q4_2', 'Q4_3', 'Q4_4', 'Q4_5', 'Q4_6','Q4_Outro'], 
}

我需要在 multiple_respose_dict (Q2,Q4,...) 的每一列和给定变量(可以是或不是多重响应)之间创建一个交叉表

如果我的数据集是这样的:

Q2_1    Q2_2    Q2_3       Q3
Na loja Email   Folheto    Sim
Na loja                    Não
Na loja Email              Sim
                Folheto    Sim

输出将是:

      Sim   Não
Na loja 2   1
Email   2   0
Folheto 2   0

我还希望能够将其计算为列的百分比。

话虽这么说,我正在尝试创建一个函数来接收数据集、字典和变量(也可以是多重响应,也可以不是)以及它的列百分比或绝对值。

我不确定我是否能很好地使用字典进行思考,如果不是,我非常愿意接受其他建议。

python pandas pivot-table multiple-columns
1个回答
0
投票

目前尚不清楚您所提供的信息真正想要什么,但您可以使用以下内容从示例数据集中获取输出。

import io
import pandas as pd

data = '''Q2_1,Q2_2,Q2_3,Q3
Na loja,Email,Folheto,Sim
Na loja,,,Não
Na loja,Email,,Sim
,,Folheto,Sim'''

df = pd.read_csv(io.StringIO(data), sep=',', engine='python')
dfm = df.melt(id_vars=['Q3'], value_vars=['Q2_1' ,'Q2_2', 'Q2_3']).drop('variable' , axis=1)
dfg = dfm.groupby(['value', 'Q3']).agg(count=('value', 'count')).reset_index()
dff = pd.pivot_table(dfg, values='count', index=['value'], columns=['Q3'], aggfunc="sum", fill_value=0).reset_index()
dff

输出

Q3    value  Não  Sim
0     Email    0    2
1   Folheto    0    2
2   Na loja    1    2
© www.soinside.com 2019 - 2024. All rights reserved.