gpt4 book ai didi

python - 两组虚拟变量的频率/列联表

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:12 27 4
gpt4 key购买 nike

我有一个调查结果数据框;每个问题一列,每个受访者一行。 Q1 和 Q2 是多项选择题,以虚拟变量形式编码,每个选项一列。例如:

d=pd.DataFrame({
'Q1a':[0,0,0,1,1,0,1,1],
'Q1b':[1,1,1,1,1,1,1,1],
'Q1c':[1,0,0,0,0,1,1,0],
'Q1d':[0,1,1,0,1,1,0,0],
'Q2a':[1,1,1,0,0,0,0,0],
'Q2b':[0,1,1,0,0,1,1,0],
'Q2c':[1,0,1,1,1,1,0,1]
})

print d
Q1a Q1b Q1c Q1d Q2a Q2b Q2c
0 0 1 1 0 1 0 1
1 0 1 0 1 1 1 0
2 0 1 0 1 1 1 1
3 1 1 0 0 0 0 1
4 1 1 0 1 0 0 1
5 0 1 1 1 0 1 1
6 1 1 1 0 0 1 0
7 1 1 0 0 0 0 1

所以这个例子有 8 个受访者,Q1 有 4 个选项,Q2 有 3 个。

我需要一个频率表,显示在 Q1 和 Q2 中为每个配对组合勾选"is"的受访者数量(或百分比):

    Q2a Q2b Q2c
Q1a 0 1 3
Q1b 3 4 6
Q1c 1 2 2
Q1d 2 3 3

所以 6 位受访者对 Q1b 和 Q2c 都说是。

从概念上讲,像这样的命令

import pandas as pd
pd.value_counts(
rows = (d['Q1a'],d['Q1b'],d['Q1c'],d['Q1d']),
columns = (d['Q2a'],d['Q2b'],d['Q2c'])
)

我是否漏掉了一些非常明显的东西?感觉就像我,但我不太明白。我已经搜索过,但没有在任何地方找到专门解决这个问题的地方。 Python/pandas 是理想的选择,但 R 也可以。

最佳答案

您可以使用点积:

d.loc[:, d.columns.str.startswith('Q1')].T.dot(d.loc[:, d.columns.str.startswith('Q2')])
Out:
Q2a Q2b Q2c
Q1a 0 1 3
Q1b 3 4 6
Q1c 1 2 2
Q1d 2 3 3

部分 d.loc[:, d.columns.str.startswith('Q1')]d.loc[:, d.columns.str.startswith(' Q2')] 基本上是选择列。可以用d.filter(like='Q1') as @Zero suggests 来做的更清楚:

d.filter(like='Q1').T.dot(d.filter(like='Q2'))

如果您想任意选择列,您可以只传递一个列名列表。上面的等价物是

d.loc[:, ['Q1a', 'Q1b', 'Q1c', 'Q1d']].T.dot(d.loc[:, ['Q2a', 'Q2b', 'Q2c']])

关于python - 两组虚拟变量的频率/列联表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46381713/

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