我正在使用 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
我还希望能够将其计算为列的百分比。
话虽这么说,我正在尝试创建一个函数来接收数据集、字典和变量(也可以是多重响应,也可以不是)以及它的列百分比或绝对值。
我不确定我是否能很好地使用字典进行思考,如果不是,我非常愿意接受其他建议。
目前尚不清楚您所提供的信息真正想要什么,但您可以使用以下内容从示例数据集中获取输出。
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